Lispってすげー
(c) Copyright 2005 Takehiro Yamada . All rights reserved.
Lispってすげぇ、と思ったのはその形式性ゆえだった。
そのことに気づいたときの衝撃は大きく、眩暈を覚えたほどだ。もちろん、ぼくは三文プログラマーにしかすぎず、一流のハッカー(いい意味での優秀なプログラマー)たちから見れば、全然、大したことないことかもしれないし、無知からきた衝撃だったかもしれない可能性は依然、ある。
だいたい、Lisp自体にはずいぶん前から触れていたのだ(elispだけど)。
にもかかわらず、すげぇ、ということに思い至ったのはついこの間のことだ。
使うという経験が臨界に達っしてようやく理解が兆したというわけなのだろうが、それにしてもあまりにも鈍いではないか。
気づくための条件は最初から目の前に揃っていたというのに。
それは「car」であり、「cdr」であり、Lispはリストをあつかうということであり、あのやたらと「(」「)」の多いあの構文そのものだ。そして、プログラマーとして働きだしたかなり最初のうちにすでにチェーンデータというものには触れていたにもかかわらず。
リストという言葉にだまさえてはいけない。
なんとなくシーケンシャルな文字列のような気がしていたが、そうではないということだ。
たとえば、(ぼく (母 (祖母 祖父)) (父 (祖母 祖父)))というデータ構造を表現し、簡単に取りこめるプログラム言語はLisp以外にはないんじゃないか、と思ったとき、ようやくその凄さに気づいたのだった。そして、この構造は簡単なXMLといってもいいものだ。
もちろん、世の中の全部のプログラム言語を知っているわけじゃないから――そういうリスト構造を持つ、プログラム言語は存在するかもしれない。Perlにもリストという概念はあるけれど、少くとも構造を持つものではなかった。
リストにアクセスする手段として「car」と「cdr」に相当するものが必要なのだ。が、Perlにはなかったように思う。
もちろん、そのようなデータ構造は実装可能だろうし、ライブラリとして存在することもありうる。たとえば、Cで組むならポインタだらけのチェーンデータになる(実際、Lispの内部構造もそのようにつくられていることだろう)。
Lispはリストというデータ構造をネイティブに持っている、ということだけではなく、まず、リストだったということが、驚きなのだ。Lispにとってプログラムそれ自体もリストであるということは始原からリストをあつかえるということが必要だったということなのだから。
だからLispがLispたりうるのはまさに、あの()だらけの形式性ゆえなのだ。
Lispのすぐれた点というのは色々とあるだろうが――たとえば、ガベージコレクション機能を持つ、など――それらが他のプログラム言語に取りこまれることはあるだろうし、事実、リストというデータ構造自体はPythonも持つという。が、プログラム自体(ここではソースコードの意味でつかっている)がリストである、ということはないだろう。なぜならそうなったとき、そのプログラム言語はLispと呼ぶしかないからだ。
Return To HomePage | Return To List Page
Takehiro Yamada