Maclisp

MacLISP（またはMACLISP）は、LISPプログラミング言語の一種。初期のLISPに基づき、1960年代後半、MITのProject MACで開発された。リチャード・グリーンブラットがメインプログラマとしてPDP-6向けのコードベースを書き、その後の保守や開発はJon L. Whiteが担当した。MacLISPと呼ばれるようになったのは1970年代に入ってからで、PDP-6上に他のLISP処理系（）も登場したためである。

MacLISPはDEC PDP-6/10上で動作した。当初オペレーティングシステムとしてはITSだけだったが、後にはPDP-10上の他のOSでも動作するようになった。当初の実装はPDP-10のアセンブリ言語で書かれていたが、後にMultics上にPL/Iを使って移植されている。MacLISPでは、他の言語処理系ならバージョン番号がどんどん大きくなるような大幅な機能追加が継続的に行われた。

MacLISPは数式処理システムMacsymaの実装に使われ、逆にMacsymaの一部機能がMacLISPに導入された。SHRDLUの実装にも使われ、1980年代初期まで人工知能研究でよく使われた。Planner や Scheme など他のプログラミング言語の実装ベースとしても使われた。また、Multics上のMacLISPは、LISPベースのEmacs（Multics Emacs）の実装に使われた。

MacLISPは様々な影響を及ぼしたが、現在ではほとんど保守されていない。しかし、PDP-10エミュレータ上では動作するので、古いAIプログラムを実行してみることはできる。

MacLISP には当初、少数の決まったデータ型しかなかった。CONSセル、アトム（当時はシンボルと呼ばれた）、整数、浮動小数点数だけである。その後、配列、多倍長整数、文字列、タプルが追加された。整数以外のオブジェクトはポインタとして実装されており、そのデータ型はポインタが指したアドレスの範囲で判断されていた。

プログラムはインタプリタでもコンパイラでも実行可能である。コンパイラは変数スコープが制限される点と、CARやCDRといったインライン処理でエラーチェックをしない以外はインタプリタと変わらない。1970年代中ごろ、数値演算性能を強化したコンパイラが登場した。これにより、整数演算ではFORTRANと同程度の性能が実現された（ただし、配列やループの実装はFORTRANの方が高速だった）。

初期のバージョンはPDP-10のアドレス範囲である18ビットで制限されており、様々な実装上の制限があった。Multicsでは、より大きなアドレス空間が使えたが、Multicsシステム自体が数少なかった。人工知能で必要とするメモリ量と性能がPDP-10の限界を超えたころ、LISPマシンが開発された。LISPマシン上のLISPであるはMacLISPの後継にあたる。その他のLISP処理系も様々なコミュニティで作られ、最終的にこれらを統合したCommon Lispが生まれることとなった。

MacLISPという名称はProject MACに由来しており、AppleのMacとは無関係である。

 参考文献 
 スティーブン・レビー（著）、古橋芳恵・松田信子（訳）、『ハッカーズ』、1987年、工学社、ISBN 978-4-87593-100-3

 外部リンク 
MACLISP.info: The Pitmanual
MacLisp manual
The Multics Maclisp compiler

Category:LISP