LispはList Processing Language(?)の略とされ、リストを処理するためにMITで開発されました。そもそもなんでリスト処理か?というと、人間の頭の動きをモデル化する際、頭の中で人、馬、机、等の対象をシンボル処理しているモデルが考案されました。Lispはそのモデルを動かし検証するための言語として開発されましたのです。
リストの例 (human 太郎 男性 温厚)すなわち、必要とされる用途がまず存在し、その用途に適するように作られた言語です。Lispは人工知能研究(AI)の盛り上がりと共に発展し、MITがルーツのMacLispから多くの方言が生まれました。そして言語の違いを統一したCommonLispへと進化しました。また言語を最速で実行するためのLisp専用コンピュータ(Symbolics)等も開発されました。しかし、人工知能研究の終息と共に、Lisp言語は表舞台に登ることはなくなりました。とはいえ、Lispから発展したScheme(guile?)はGnuでの標準スクリプトになる等、柔軟な表現能力が評価され、特定の分野では活躍が期待されています。
Lispはその独特の表現に特徴があります。以下の例にあるようにカッコ()を使いまくった表記法です。最初の人はこのカッコとクオート(’引用符)でめげると思いますが、処理系の立場からすると、カッコで単語が囲まれれるが故に構文解析が不要になっています。人間に構文解析をさせているとも言えますね。
(defun talk(word) (cond ((equal word 'hello) 'bye) ((equal word 'who) 'foo) (t 'tryMe)))
Lisp言語を学ぶ意義というのは現在ではあまり無いかもしれませんが、EmacsやGnomeのカスタマイズなどでいろいろ役に立つかもしれません。Lisp言語を学ぶ一番効果的な方法はLisp自体でLisp処理系を書く事だと言われています。あるいはC言語等でLisp処理系を実装すると仕様がよく分かります。
このページでは、過去に作成したLisp処理系のソースを公開しています。趣味として作っただけなのでToyProgramであり、処理速度は評価していません。Lisp処理系を作っていた頃、オブジェクト指向が流行っていたので、Lisp上でクラスが扱える拡張も加えています。また、Unix上でGUIが操作できるようにと、X11のライブラリ(Xlib)を呼び出してウインドウ等も出せるようにしていましたが、XlibのバージョンがX11R4から上がった時修正を反映していないので動作が不安定です。GUIを制御するスクリプトとしてTcl/Tk等もあり、あまり必要性がないのでメンテしていません。
処理系のソースを公開します。バグや制限事項等は添付していますReadmeをご参照下さい。基本的にToyProgramですので、勉強用と割り切って下さい。なお、バイナリは含まれません。簡単なソースですのでgcc等で適当にコンパイルして下さい。Windows上でコンパイルする場合、Cygnusのgccを入れるか、あるいは、ボーランドのフリーコンパイラなどをお使い下さい。