オビの魔法使い - 謎のLisp脳
2008.03.17
さて、先週「プログラミングGauche」が出ていました。私は速攻でゲット。
で...この本のオビが
「Lisp脳」の謎に迫る ---- Scheme プログラマは何をどう発想しているのか?
というものでした。なるほどねえ....「Lisp脳」ね。
私なんかは世代的に「ハッカーを名乗るんだったら Lisp の素養はあって当然」という感覚なのですが、若いプログラマだと、「Lisp が得意=珍獣的プログラマ」という感覚なのかもしれませんね(苦笑)。
でこのところ関数プログラミングに光が当たってきだして、Lisp を知らない世代も「何かと気になる....」となってきた、ということを、このオビの名(迷)文句が示しているようにも思います。
それはともかく、この本の特徴...というと、まあわりと基本から説明している雰囲気です。「Lisp を巡るちょっとしたコラム」として「へえ~」というような雑学が開陳されていて、面白いです。たとえば、
λ算法がなぜ「λ」なのか、というと、ラッセルとホワイトヘッドが書いた「プリンセピア・マセマティカ」の中で、束縛変数を示すのに「カレット(^)」を使っていて、これをλ算法の祖であるチャーチが一行で^x(x+x)と示したのだけども、カレットの表記が見た目ヘンなので、これをギリシャ文字のΛ(大文字)にした。しかし、他の記号と間違えやすい(確かに「かつ」を示す∧と間違えやすいです)ので、小文字のλになった(p63 の大意)。
なるほど、おそれいりました。.
で、この Gauche という処理系の特徴としては、
- 1. Perl の影響がある、ということを作者自身が認めちゃっている。で、正規表現リテラルとか、文字列フォーマットととか、そういうやや汚い(が実用的な)機能がサポートされている。
- 2. Common Lisp 起源のオブジェクトシステムである、CLOS を持っていて、すべてはオブジェクトである。
- 3. Common Lisp 起源の例外システムがある。
- 4. 汎用のアプリケーションサーバとして使える、Kahua というフレームワークがある(Erlang だと OTP に相当するもののようです)。
まあ、のっけから「Perl の影響を受けている」と言ってしまうのって、今のギョーカイの雰囲気からすると、結構度胸のあることのようにも思います。やはり「Perl の汚さ」というのは、「さすがにもう勘弁してよ...」という雰囲気がないわけではないですからね。まあとはいえ、正規表現を使うのに、それを文字列として評価する(たとえばJavaみたいに)のではなくて、独立のオブジェクトである正規表現リテラルで表現する、とか、文字列の中に評価時に展開される変数(というか式表現)を埋め込めるとか、そこらへんは「まあ、とにかく実用的、というものか」という感じで許せるものじゃないでしょうか。
別の流行ネタである Erlang だって、たとえば Haskell の美と比較すれば、ハッキリ汚いです。しかし、Erlang の強みはやはり「実用性」ですから、そこらへんこの Gauche と似た側面があるのではないでしょうか。考えてみれば近年では最高の成功した言語の一つである Java だって、smalltalk と比較すれば汚く、C++ と比較すれば「出来ないこと多すぎ」な、純粋に言語的に見れば中途半端かもしれないけども、「実用性はちゃんと考えてある」言語だったわけです。Gauche や Erlang が強調する「実用性」というのも、これは関数型プログラミングの「成熟」を表現しているのかもしれませんね。
投稿者 : 杉浦 こずえ | 投稿日時 : 2008.03.17 20:16
あすなろBLOGのトラックバック・コメントは承認制になっています。
すぐにブログに反映されませんので、ご了承ください。
名前:杉浦こずえ2008年03月18日 20:56
あれ~、アトムという言い方が古いのかしら....私がLispに最初に触れた頃って、アトムをかっこで括ったものがリストだ、なんて説明を聞いてたんですけどねぇ。
まあ、厳格に言えば「cons でないオブジェクト」がアトムなのでそれを判定する atomp なんて述語を使った記憶もある(scheme じゃないね)し...
.p255 の表によると、 list, pair, null がやっぱりオブジェクトだから、定義からいくと、一致しないことになるのかも。ちなみに p106 でアトムってコトバはコラムで使ってるよねぇ...けど、何でこの本で「アトム」という表現を回避しているのかなぁ...何かあるのかしら....
名前:えんどう2008年03月18日 23:04
Schemeの仕様書であるR5RSには「アトム」という用語は登場していません。対でないオブジェクトをアトムとしてしまうと、ではvectorや文字列は何なんだ、といことになりませんか?
ちなみにGaucheで(class-of (cons 1 2))を評価させると#>が返ります。つまり対もオブジェクトですよ。
名前:てるお2008年03月19日 02:18
>何でこの本で「アトム」という表現を回避しているのかなぁ...何かあるのかしら....
Schemeでは使わないね。
教科書のSICP本にも出てこないし。
名前:杉浦こずえ2008年03月21日 09:27
ご指摘ありがとうございます。
今後本など参考に勉強していきますので、よろしくお願いします。






名前:えんどう2008年03月17日 22:12
「アトムはオブジェクトである」はどういう意味ですか? ここで「アトム」をどういう意味で使っているのでしょうか。ちなみに本書には「アトム」という用語は登場しません。