2018年6月25日月曜日

カッコがあるからいいんじゃないか

 Lispでプログラミングしていると、粘土をこねているような感覚がある。
 ぐにゅぐにゅと、つくったものをくっつけたり、ちぎったりしているような感覚。ほかの言語ではそんなことはないのでおそらく、Lisp系の言語に固有な感じなのだろう——不思議なことにElispよりCommonLispの方がその感覚が強い。CommonLisp特有の機能を使っているわけじゃないのに。気持ちの問題かな?
 ほかのプログラム言語はもうすこし不自由な感じで——こねられない(感覚としていは切り貼りしているような感じ。粘土より硬い)——、何でだろう、とずっと疑問だった。
 もしかしたらそれはS式のおかげではないか?
 Lispが嫌われる大きな理由のひとつ。あのカッコだらけの姿。
 はじめてLispのプログラムを見たときはのけぞったあのカッコ。こんな言語、わけがわからん、と思ったのだけれど。

 これはぼくだけのことなのかもしれないけど、プログラムを組むとき、トップダウンに上から単純に組んでいくわけじゃない。かといってボトムアップともかぎらず、いきなり真ん中ということも多い。
 これは形が見えているところから組むからだろう。——重要なのは組んでみると、まちがいに気づくことが多々あるということだ。
 この形はよろしくない。
 で、プログラムをこねる。
 よくやるのがロジックを外出しすることだ。同じロジックを組みはじめると、イラッとする。それで共通関数にくくりだす。
 これがLispだと楽にできる。
 だってすでにカッコでくくられているから。Ctrl-Meta-kでkillしてyankするだけ。ほかの言語だと、行レベルでの範囲選択になるので範囲指定に頭を使うし、ちょっとほかの部分とまじっていたりしてひと手間かかる。もちろんLispの場合でもロジックがまじってしまっていることはあるけど、概ねだいじょうぶ。たぶんロジックがカッコでくくられているからだろう。まじっていない部分のみを取り出すのは容易だ。
 逆に、これは細かくしすぎた、と思ったときはカッコごと、ほかのカッコの中に移動させて、まぜる。

 こうやって考えると、LispがS式であることは重要。