HoareのCSPとM式モドキ
月曜日, 4月 27th, 2009ホーアCSPモデルの理論という本を読みました。
この本は、前書きに
「実装例はLISPのサブセットで書かれている」
と書いてるんですが、いざ中身を見てみると
prefix(c,P)=λx. if x=c then P else "BLEEP
M式のようなヘンテコなプログラムが出てきます。
関数定義が数式みたいに=で行われていたり、
lambdaがChurchのラムダ計算の記法みたいになっていたり、
ifが全く別の言語みたいに書かれていたり、
単引用符’が二重引用符”になっていたり、かなりフリーダムです。
一応、これにはフォローがあり、
LISP関数を定義するためにここで用いた表記法は,まったく正式なものではない.
したがって,これらは実際の各LISPシステム上で用いられている従来のS式型式に合わせて
変換する必要がある.
とかいてあります。「S式型式」って原文ではどうなってるんだろう…
そして、この後にLISPkitでの例が載っています。
(追記)
「S式型式」は原文では”S-expression form”となっていました。
これってどうなんだろう。「S式を使った形式」くらいのほうが分かりやすいような…
(prefix lambda (a p) (lambda (x) (if (eq x a) p (quote BLEEP))))
LISPkitという実装は初めて聞きましたが、結構有名みたいです。
代入操作がなく、遅延評価の機構を持ってるとか。
せっかくこんな面白いものがあるのに、実装例は何故かM式モドキで書かれています。
ただ、この本に登場するプログラムは、関数が返した関数を呼び出して、
そこから、新たに関数が生成されて…
といったように、高階関数が多用されており、
S式でなくてもLISPっぽさが溢れていて楽しいです。
ちなみに、訳者あとがきには次のような一文があります。
ここではあの悪名高き括弧を多用したS式ではなく,
アルゴル風な表記法が用いられているため,
意味を汲み取るのにほとんど困難はないようになっています.
「悪名高き括弧を多用したS式」にワラタ。