elisp を書く、というか書けない、というか書く体力がない

そういえばこの頃 Obj.magic を使ってないので well-typed Camler な私が emacs lisp に挑戦してみた。これは泣ける。
ちなみに Lisp系経験は scheme を、えーっと、15年くらい前に。

計算機プログラムの構造と解釈

計算機プログラムの構造と解釈

の演習問題を Call/CC 位まではやったと思うぞ。昔の事なんでよく覚えてないが、こんなすごい紫色の表紙だったっけ?錬金術的な絵は覚えているけど。

で、elisp に挑戦。結果:ちょっとしたことで20分、30分取られる。書いてらんない:

  • スコープがキモい
  • 括弧の位置が間違っていた
  • (MLだと違う型の)同じ名前の関数を定義してしまっていた

型があればほとんど一瞬で解決した問題ばかり、、、型無し言語でプログラム書く自信が全くないことを確認した。といういうか、というか、どう考えても生産性低すぎ。これでバリバリ書けるっていう Lisper というものがいるのなら(いるのかどうかおおいに疑問だが)素直に尊敬せざるを得ない。

ライブラリ的にアレな点:

  • List.filter, List.fold がない

そこまでして演習させたいのか?ちなみに上段落の問題で filter を書くのにさえ15分かかったぞ。

言語仕様的に面食らった点:

  • 部分的用が、、、ない、というか (f a1 ... an) って、ML でいう f (a1,...,an) ってことだった。すっかり忘れていた。
  • パターンマッチがない (いやー、car, cdr ってなんでいるんだろと思ってたんですが、そりゃいるわナ)
  • funcall って何なの?死ぬの?
  • 動的バインディング

始めのふたつは思想の違い、で納得できるが、funcall に至っては、もし elisp関数型言語と称したいなら、仕様としておかしい。動的バインディング、、、生理的にもう駄目。クロージャまでないとは、、、天晴である。*1

と、とにかくこんな言語で今やってる仕事なんかやったら一日で会社は破産してしまうに違いない。

考察

というわけで、ML とか HaskellLisp と違って型があって嬉しい!といういつもの議論になるのだが、ちょっと道程を変えてみよう。

Lisp をやっていた人が ML に移ってすぐに、ああ、ML ってイイ。イキそう、とか思うだろうか。思わないんじゃないか。それより、Lisper から見れば、(というか他のほとんどの言語から見れば) OCaml とかは特に文法が奇怪だし、S式のほうが萌えるし、型とかいう Lisp に無かったものを勉強しないといけないし、ML イイって勧めてくる奴に限ってなんかキモオタで変なブログ書いてるし*2、そのうえ なぜこの型システムって奴は、Lisp で簡単にできることに、いちいち文句を付けてくるの?、と不満ばかりに違いない。なんで、こんなガンジがらめな言語でハッピーとか言ってルこの人、変態?みたいな。

多分こういう人たちに ML の型システムがいかに素晴らしいかをとくとくと布教しても、ご利益を実感できないので、あまり意味はないと思われる。それより、オラオラ、ML でヤルって受注したんだから死んでも ML で書くんだよ。書かなきゃ飯は食わせねぇって感じで無理にでもある程度覚えていただいて、それからおもむろに、Lisp に戻りたかったら戻ればー、戻れればね、フフフ、としたほうがよいのではないか。まあ要するに布教じゃなくて洗脳だ。

どれだけ監禁して洗脳すれば十分かはよくわからないが、13年位あれば*3十分だろう。

結論

というわけで、elisp を書くにはまず体作りから。

*1:まあ、確かに、私が初めて何も判らず見様見真似で作った lisp インタープリタのようなものにもクロージャなんかなかったな。GCもなかったが。

*2:俺は変なブログは書くがキモオタではない。キモいかもしれない

*3:私のプロフィール参照のこと