LISPは実はあんまり難しくないんじゃないか。まあ個人の感想でね?

嘘だ。

これは『実践 Common LISP』読んだ上でのわかりづらかったポイントの個人的なメモ

  1. 括弧
  2. 再帰
  3. シンボル
括弧

どうせエディタが対応とってくれる。

嘘だっ!

括弧だらけだと言われるのは、条件分岐も繰り返しも配列も連想配列もパッケージ定義もクラス定義もメソッド定義もみんなリストの形をしたコードで、違いがわからないからだろうと思う。それらが見た目に目立って異なるシンタックスで表現される言語だと、コードのパターンが見つけやすく、それを取っ掛かりに全体像を把握できる気がするけど、LISPはどこを切り取ってもリスト、リスト、リストで取っ掛かりがない。

まあ、それがLISPの強みではあるのだけれど。

基本的な制御構造やデータ構造で、LISPにあるものはRubyにもだいたいある。当たり前といえば当たり前。わかってみればそこはごく普通の言語なのだった。まる。

再帰

慣れの問題が半分くらい、何を書きたいかちゃんと理解してるかが半分くらいあると思った。未熟なのでしょうがない。熟してくると慣れの比率が上がるのだろう。

ついついループで考えてしまうのを抑制するのは難しい。でもループに必ず再帰が必要なわけではなく、do系もloopマクロもある。また、再帰的でないようなコードを書いても別に誰にも怒られはしない。そういうわけだから、これから毎日setfしようぜ?

traceを使うと関数の呼び出され方が見えるようになるらしい。これで再帰呼び出しの様子が見られるよ! やったねたえちゃん!


シンボル

LISPは、そのコードがデータと同じ方法で記述される。

それを、はじめのうちは、『LISPの構文とリストの構文に類似性がある』とか、『S式はLISPのプログラムともリストとも評価される』みたいに、LISPプログラムとリストを切り分けるような考え方をしていたんだけど、どうもそういう考え方をしているとわけがわからなくなる。シンボルが変数として扱われたり、そうじゃなかったりすることで混乱して、頭がおかしくなって死ぬ。

LISPのプログラムは単なるリストでしかない。Rubyで例えると、

[ :format, :t, "Hello World!" ]

みたいに書かれているのと変わらない。 :format は変数じゃなくてただのオブジェクトで、属性として名前なんかを持っている。それが、評価器に入れられた時にたまたま変数とか関数名として振る舞うことになるってだけ。そう考えると、シンボルが評価されたりされなかったりするスペシャルフォームとかマクロとかで混乱しない。と思う。

たぶん。この解釈であってるのか、自信はない。

そしてこれは今もってLISPわけわかんねえ……ぱねえ……と思うこと

処理系依存の仕様

パスネームとかファイルシステムとのやり取りとか。マニュアルが厚くなるな……。

汎用言語であること

LISPにはまだ見ぬ機能が山ほどあるらしい(伝聞)。高レベルな処理といえばマクロだけれど、かなり低レベルな処理も仕様の範囲内で可能であるらしい(伝聞)。

へっぽこプログラマにはちょっと手に負えない。

Hyperspecの日本語訳がないこと

英語に関しては甘え禁止らしいので言い訳できない。

LISPerの存在

存在がハードル。覇気によって心の弱いアマグラマは死ぬ。

文法知識だけあっても結局実装したい対象への理解がなければよいものは作れないこと

泣きたい。