Lispでプログラミングしていると、粘土をこねているような感覚がある。
ぐにゅぐにゅと、つくったものをくっつけたり、ちぎったりしているような感覚。ほかの言語ではそんなことはないのでおそらく、Lisp系の言語に固有な感じなのだろう——不思議なことにElispよりCommonLispの方がその感覚が強い。CommonLisp特有の機能を使っているわけじゃないのに。気持ちの問題かな?
ほかのプログラム言語はもうすこし不自由な感じで——こねられない(感覚としていは切り貼りしているような感じ。粘土より硬い)——、何でだろう、とずっと疑問だった。
もしかしたらそれはS式のおかげではないか?
Lispが嫌われる大きな理由のひとつ。あのカッコだらけの姿。
はじめてLispのプログラムを見たときはのけぞったあのカッコ。こんな言語、わけがわからん、と思ったのだけれど。
これはぼくだけのことなのかもしれないけど、プログラムを組むとき、トップダウンに上から単純に組んでいくわけじゃない。かといってボトムアップともかぎらず、いきなり真ん中ということも多い。
これは形が見えているところから組むからだろう。——重要なのは組んでみると、まちがいに気づくことが多々あるということだ。
この形はよろしくない。
で、プログラムをこねる。
よくやるのがロジックを外出しすることだ。同じロジックを組みはじめると、イラッとする。それで共通関数にくくりだす。
これがLispだと楽にできる。
だってすでにカッコでくくられているから。Ctrl-Meta-kでkillしてyankするだけ。ほかの言語だと、行レベルでの範囲選択になるので範囲指定に頭を使うし、ちょっとほかの部分とまじっていたりしてひと手間かかる。もちろんLispの場合でもロジックがまじってしまっていることはあるけど、概ねだいじょうぶ。たぶんロジックがカッコでくくられているからだろう。まじっていない部分のみを取り出すのは容易だ。
逆に、これは細かくしすぎた、と思ったときはカッコごと、ほかのカッコの中に移動させて、まぜる。
こうやって考えると、LispがS式であることは重要。