Homeに戻る  一覧に戻る 

Enjoying LISP Programming


LISPプログラミングの面白さ[2001.05.13]


LISP言語は、John MacCarthyが作成した関数型のプログラミング言語である。LISPの名前は、List Processorに由来する。プログラミング言語としては、FORTRANとほぼ同程度の歴史がある。Listを基本データとし、プログラム(関数)もListで記述する。関数もデータとして扱えるので、高次の関数(関数を引数とする関数)も自然に定義できる。有名なマニュアル"LISP 1.5 Programmer's Manual",MIT Press,Cambridge, Masachusetts,1962には、LISPインタプリタの動作がLISP自身で記述されていた。

大学時代に最初に学んだプログラミング言語はFORTRANだった。演習では、プログラムを長方形の紙カードにマークシート方式で記入するか、またはパンチャーで穴を開けて、カードリーダーで読み込ませ、大型計算機でバッチ処理していた。簡単なプログラムでも机上デバッグしかない(コンパイルエラーがあると、実行されない)ので、動作させるまでが大変だった。しかし、プログラミングの面白さを実感できたのはLISPである。LISPは授業ではやってないので、雑誌や書籍から学んだ。パソコン(8bitCPU)上のmuLISPという処理系もあったが、高価であり(貧乏学生には縁がなかった)、処理速度も遅く(Z80で4MHz)メモリも少なかった(16bitアドレス空間で最大64KB)ので、おそらく実用にはならなかった。後で(大学院の頃)大型計算機上のLISPをTSSで利用した時は、ずいぶん便利になったと思ったが、まだ(現在のPCのように)自由に使えるものではなかった。

LISPは、Lambda Calculusに基づいているが、Lambda Calculusの計算結果とは厳密には一致しないこともある。プログラムは関数を定義するが、ポーランド記法と再帰を用いる。初期のLISPはインタプリタであったが、最近は、コンパイラの方が中心になっている(もちろん、通常はインタプリタも利用できる)。関数引数での変数の束縛方式により、(例えばインタプリタとコンパイラで)実行結果が異なるFUNARG問題という興味深いテーマもあった。また、使用されなくなったデータが自動的に回収され再利用されるというGabage Collection機能を持っているので、メモリ管理で楽ができる。
LISPは様々な方言(有名なものでは、MacLISP,InterLISP,ZetaLISP,Schemeなどがある)ができたが、産業上の理由からGuy Steele他を中心としてANSIで標準化作業が行なわれた結果が、Common LISPである。

CLtL2では、CLOS(Common LISP Object System)つまりオブジェクト指向を取り入れたが、小規模のプログラムを書くには、(オブジェクト指向でないSubsetの)Lispが書き易いと思う。Lispプログラミングでは、データやプログラム自身も動的に構成して、その場で実行できる。また、未完成のプログラムもそれなりに動作させることができる。データとプログラムがS式で記述されるのが美しいなどの特徴がある。用途によっては、多倍長整数や有理数、複素数などのデータ型も魅力的である。もっとも、多倍長整数をサポートする言語(Ruby,Smalltalk-80など)も最近は珍しくなくなった。

現在所有しているLISP関連書籍は、以下の通りである。古いものは、絶版などで現在入手できないものもあると思う。よく集めたものである。


[参考文献]


Last Update: 2005.06.12
H.Nakao

Homeに戻る[Homeに戻る]  一覧に戻る[一覧2001に戻る]