S式のはなし

This entry was posted by on Wednesday, 24 January, 2007
> >Lisp:S式の理由 >
プログラムとはツリーである、というのがまさにそうだなあと思った。S式とは、ツリー構造を用意に書き下すための方法なんだよな。まあでも、ほかの言語も知っていると、ほかの構文だってけっきょくそれなりにツリーであり、S式のようにシンプルで単一的でないというだけだ、という気がする。そしてその方が見やすいといえば見やすい。
> >では、S式のように、カッコだけを使ってかならず前置記法で書くことにはどんな意義があるか? > >ひとつにはマクロだろうと思う。いま OnLisp をつらつらと読んでいるのだけど、マクロというのはまさに構文木をガッツリと書き換える手法である。ほかの言語でも、プログラムをノードツリーとして把握するというのはあると思うけど、そのツリーを、一定のルールに従ってさくっと入れ替えてしまうのが、 Lisp のマクロだ。だからとても強力だ。 > >それからS式はエディタでとても書きやすい。いや、ほかの言語とエディタは知らないけど、 Emacs は Lisp のために生まれたエディタで、S式を操作するのにとても優れた機能がいっぱい入っている。見た目の異様さはすぐ慣れるけど、エディットのしやすさ、っていうのには上限がある。S式という体裁だからこそ、プログラムツリーについて、ノード単位で切り貼りしたり入れ替えたりといったことが手軽にできる。「プログラムはツリー」なんだから、ツリーは簡単に編集できないとね。 > >この「容易さ」というのは、マクロと本質的に同じだとも言える。マクロは、プログラムがプログラムツリーを書き換える。エディタは人間が書き換える。それぞれ、ノード単位の操作が基本になっているのも、同じ。 > >でも、それって些細な要因だといえばそうだと言える。「やればできるはずだ」というか。 > >Lisp のマクロほどの強力さをもつマクロがほかの構文の言語で不可能かというと、実はできる。 Dylan はよく知らないのだけど、 OCaml には camlp4 というたいへん強力なマクロ処理系があって、代替構文を書けてしまうくらい強力だ。でも、おかげで camlp4 の中がどうなっているか、というのはとってもややこしい。 > >エディタについても、S式はとてもシンプルな構造なので、ああいった強力な編集機能が >簡単に >提供できたわけだけれど、それはもっとエディタが賢くなれば大丈夫だ、という考え方もある。 > >だから、「S式の良さ」というのは、言ってみれば historical reason だと思う。でも、今のところはそれなりに現実的な解なんじゃないかな。問題は、その「現実的なところ」がわかりにくい点にあるんだよね。 > >個人的には、 f(a, b, c); が (f a b c) になってもいくらも違いはないと思うんだけど。 >

Comments are closed.