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関連書籍は、以下の通りである。古いものは、絶版などで現在入手できないものもあると思う。よく集めたものである。
[参考文献]
- [1]Patrick Henry Winston, Berthold Klaus Paul Horn, "LISP 3rd Edition", Addison-Wesley Publishing Company, 1989, ISBN0-201-08319-1, "Winston本第3版。LISPプログラミング入門書。".
- [2]山本 和彦, "リスト遊び -Emacsで学ぶLispの世界-", 株式会社アスキー, 2000, ISBN4-7561-3442-4, {1200円}.
- [3]Bil Lewis, Dan Laliberte(著), 榎並 嗣智, 井田 昌之(監訳), "GNU Emacs リファレンスマニュアル", 1995, ISBN-1-002114-48-5.
- [4]John Allen, "Anatomy of LISP", MacGraw-Hill, Inc., 1978, ISBN 0-07-001115-X.
- [5]John Allen(著),後藤 英一, 戸島 熈(訳), "LISPの構造-LISPプログラミング-", 日本コンピュータ協会, 1983, "翻訳が途中までで終っているので、購入するなら原書のAnatomy of LISPの方が良いと思う。".
- [6]Richard Jones, Rafael Lins, "Gabage Collection Algorithms for Automatic Dynamic Memory Management", John Wiley & Sons Ltd., 1996, ISBN 0-471-94148-4, "GCのアルゴリズム解説書".
- [7]J.Roger Hindley, Honathan P. Seldin, "Introduction to Combinators and λ-Calculus", LMSST 1, Cambridge University Press, 1988, ISBN0-521-31839-4, "λ-Calculusの入門書".
- [8]Sonya E. Keene, "Object-Oriented Programming in Common Lisp A Programmer's Guide to CLOS", Addison-Wesley Publishing Company, 1989, ISBN 0-201-17589-4.
- [9]Guy L. Steele Jr., "Common LISP The Language 2nd Edition", Digital Press, 1990, ISBN 1-55558-041-6, "Common LISPの定番本。CLtL2またはGuy Steele本と呼ぶ。".
- [10]Daniel P. Friedman, Mitchell Wand, Christpher T. Haynes, "Essentials of Programming Languages", MIT Press, 1992, ISBN 0-262-06145-7, "Schemeによるプログラミング教科書".
- [11]Peter Henderson, "Functional Programming Application and Implementation", Prentice/Hall International, 1944, ISBN0-13-331579-7, "Delay(lazy) evaluationを利用したLispkit Lispの実装を解説。".
- [12]P.H.Winston, B.K.Paul Horn, "LISP 2nd Edition", Addison-Wesley Publishing Company, 1984, ISBN 0-201-08372-8, "Winston本第2版。LISPプログラミング入門書。".
- [13]湯浅 太一, "Scheme入門", 岩波書店, 1991, ISBN4-00-007701-5, 3200円, "Scheme入門書".
- [14]萩谷 昌巳, "ソフトウェア考現学 基礎概念への最新おもしろガイド", CQ出版社, ISBN4-7898-3300-3, 1300円, "p78-88にLISPが紹介されている。".
- [15]黒川 利明, "LISP入門", 培風館, 1982, 2200円.
- [16]P.H.Winston, B.K.Horn(著), 白井 良明/安部 憲広(訳), "LISP", 培風館, 1982, ISBN 4-563-00784-6, 3600円, "Winston本初版の翻訳本。".
- [17]湯浅 太一, 萩谷 昌巳, "Common Lisp入門", 岩波書店, 1986, ISBN 4-00-007685-X, 2900円, "Common LISP入門書。".
- [18]中島 玲二, "数理情報学入門 スコット・プログラム理論", 朝倉書店, 1982, 2500円, "プログラムの表示的意味論の入門書。p15-52にλ-Calculusが解説されている。".
- [19]中西 正和, "Lisp入門 システムとプログラミング 第2版", 近代科学社, 1981, 2100円, "最初に買ったLISP本。LISPプログラムは、M(Meta)式およびS式で記述されている。".
- [20]井田 昌之,元吉 文男,大久保 清(編),"Common Lispオブジェクトシステム -CLOSとその周辺-", 共立出版, 1988, 3500円, "今は亡き雑誌bitの別冊。CLOSの解説書。".
- [21]Guy L. Steele Jr.(著), 井田 昌之(監訳), "Common LISP 第2版", 共立出版, 1991, 7670円, "これもbit別冊。CLtL2の翻訳本。厚いためか高価なのが難点。現在も活躍中。".
Last Update: 2005.06.12 |
H.Nakao |