これは私が気分でスペースを入れたり入れなかったりしたというわけではありません。Iokeではメッセージに引数を付ける場合にはスペースを開けてはいけません。スペースを開けると、続くものは次のメッセージとして扱われてしまうからです。ある意味一貫したきれいな文法とも言えるんですが、ifやwhileのあとにスペースを入れてエラーになった時には困ったのでこのことはマニュアルの分かりやすいところにデカデカと書いて欲しかったです。どちらを探しても標準入力から一行取得する方法が見つかりませんでした。考えてみるとIokeはJVMで動く言語であり、Javaとも連携できます。標準入力から読み込むところだけJavaのメソッドを呼んでやればいいんです。違う型だと怒られました。必死に色々探して両者を変換する方法を見つけて何とかなったんですが、こういうのもマニュアルの分かりやすいところにデカデカと書いて欲しかったです。これでSmalltalk系の言語はIo、Smalltalk、Iokeで3つ目となりました(処理系のインストールに失敗したので使わなかったけどSelfという言語も少し勉強しました)。思ったのは、みんなそれぞれ独自の世界を持っており、学習コストが妙に高いということです。Smalltalkは仕方ないとして、その後に続く言語がそれぞれちょっとずつ違うというのは初心者にはなかなかつらいです。短時間で学習してLISPを実装しないといけない人の気持ちも考えて欲しいです。「D言語は使ったから次はE言語だろ」という安直な考えで選びました。このE言語は分散処理のために設計されたみたいですけど、私の目的は簡単なLISPを実装することなので、分散処理についての機能は何一つ調べてないです。あとJVMで動きます。インストール手順長すぎマニュアルを読んでEの処理系をインストールしようと思ったら物凄い長い手順が書いてありました。それはもう、全部見る前にそっと閉じてしまうくらい。この手順を無視してテキトーにやったら、なんだかよく分からいけど動きました。なんだかよく分かりません。外観EはC-likeな文法でなおかつ変数に型を書かなくていいので、なかなか私好みです。見るからに簡単そうですね。変数を作っている箇所があります。作った変数はimmutableになることです。なんだか参照渡しみたいじゃないですか。参照渡しに見えない人は見えるようになるまでFORTRAN系の言語でLISPを実装し続けてください。いう演算子を使います。いう演算子はありません。これはなかなかおもしろい試みだと思いました。2文字タイプしないといけないというのは手間ですが、代入と比較を間違えることはほぼなくなります。好みではないですがこういうものありだと思います。Javaとの連携EもJVMで動く言語なのでJavaのメソッドを呼び出せます。これを試そうとすると失敗。処理系のインストールを手順通りにしなかったバチが当たったのかもしれません。IokeのときのようにJavaのメソッドを呼ばないと解決できないような問題はなかったので、すべてをEのなかで完結させることで特に問題なくLISPを実装できました。残念ながらEのドキュメントはあまり充実していません。JVMで動く言語だし、メソッド名などはJavaと同じものを使っているのだろうと思ったら、実際はぜんぜん違う名前を使っていました。