SSブログ

What Makes Lisp Different? [言語比較]

Higher-Order Perl の Mark Jason Dominus は前書きの中で以下のように書いている。

例えば、Peter Norvig の本 Paradigms of Artificial Intelligence Programming には What Makes Lisp Different? というセクションがあって Lisp の7つの特徴について書いている。Perl はそのうちの6つを共有している。C はゼロだ。

この前書きではそのうち3つしか数え上げていないので他は何なんだろう?と思っていたのだが、以下のものだった。

1. Built-in Support for Lists
2. Automatic Storage Management
3. Dynamic Typing
4. First-Class Functions
5. Uniform Syntax
6. Interactive Environment
7. Extensibility

MJD は多分5以外のすべてにチェックを入れたのだろうと推測する。

1はリストのビルトインサポートということなのだが、この場合のリストというのは関数型のリストのことで、Perl の配列なんかとはちょっと違う。なのでちょっと甘い基準を適用しているのだろう。(たぶん「ビルトインじゃないけど実装はできるでしょ」的な)

7の拡張性はそもそも基準として曖昧な部分があるが、Norvig は例としてマクロを挙げているのでこれも Perl に適用するには苦しいところがある。

そんなわけで厳しい基準を適用すると本当は4つくらいだと思う。

ちなみに6のInteractive Environmentにはインタラクティブシェルという意味と、シンボルテーブルへの実行時の参照という意味があって、素の Perl に適用されるのは後者だ。これは前者は言語自体の問題ではないのでOKだろう。

さて、この7つの特徴をめぼしい言語について適用してチェックをつけてみた。いい悪いはともかくとしてその言語の Lisp 度を見る基準になるかもしれない。(6は先の後者の意味で評価している)

Perl Lua Ruby Python JavaScript OCaml Tcl Scala Haskell SML awk
1. Built-in Support for Lists × × × × × × ×
2. Automatic Storage Management
3. Dynamic Typing × × × ×
4. First-Class Functions × ×
5. Uniform Syntax × × × × × × × × × ×
6. Interactive Environment × × × × ×
7. Macro × × × × × × × × × ×

厳しいほうの基準を適用すると Perl の Lisp 度は Lua, Python, Ruby, JavaScript なんかと違わないということがわかる。
Higher-Order Perl みたいな本をこれらの言語で書くということも不可能ではないということだ。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。