Information Processing Language (IPL)
Information Processing Language (IPL)は、1950年代半ば、具体的には1956年頃に、
ランド研究所およびカーネギー工科大学において、
人工知能研究の黎明期を代表する
アレン・ニューウェル、クリフ・ショー、
ハーバート・サイモンの三氏によって開発された
プログラミング言語です。このプロジェクトでは、ニューウェル氏が言語仕様の設計とアプリケーションの開発を、ショー氏がシステムプログラミングを、そしてサイモン氏がアプリケーション開発とユーザーとしての視点を担当しました。IPLは、一般的な問題解決、特に当時のAI研究で扱われた記号処理に適した機能を備えることを目指して設計されました。
IPLがコンピューター科学史において特に重要な位置を占めるのは、その後の多くの
プログラミング言語に影響を与えた革新的な概念を初めて導入した点にあります。その中でも特筆すべきは、
リスト処理の概念を開拓したことです。これは、可変長のデータを柔軟に扱えるリスト構造をプログラムの基本的な要素とした点で画期的でした。また、
アセンブリ言語に近いスタイルを持ちながらも、リスト、連想(アソシエーション)、
スキーマ(フレーム)、動的なメモリ管理、
データ型の概念、関数の再帰呼び出し、連想探索、関数を引数として渡す機能、ストリーム処理、そしてノンプリエンプティブな協調型
マルチタスクといった、後の時代に一般化される多くのプログラミング要素を先駆的に備えていました。
言語仕様の特徴
IPLの言語仕様は、現代の視点から見ると非常に独特です。プログラムの基本単位は「セル」であり、すべての「シンボル」はアドレスと名前を持つセルとして扱われました。シンボルはアルファベット一文字に続く番号(例: H1, A29)や「9-」に続く番号(例: 9-7, 9-100)といった形式で記述されました。英字で始まるものは「regional」と呼ばれ絶対アドレスに対応し、「9-」で始まるものは「local」と呼ばれ特定のリスト内でのみ有効、それ以外の番号のみのシンボルは「internal」として区別されました。
リストは互いに参照を持つ複数のセルによって構成されました。各セルは、命令コードや間接参照を指定するフィールド(P, Q)と、そのセルの値を表すシンボルを格納するフィールド(SYMB)を持っていました。特に、IPLのリスト構造は単なる要素の線形リストにとどまらず、「description list」と呼ばれる、属性名と値のペアからなる付属リストを持つことが可能でした。この付属リストはlocalシンボルで識別され、属性名を使って値にアクセス・変更するプリミティブも用意されていました。
IPLは、リスト操作機能を強化した
アセンブリ言語のような性質を持っていました。特定のセルは
アセンブリ言語におけるレジスタのように特別な役割を担いました。例えば、H1はプログラムカウンタとして機能し、そのLINKフィールドは
コールスタックのトップを指しました。H0は引数と結果の受け渡しに、H2は動的なメモリ割り当てのためのフリーリストに、H5は
プロシージャの成否を示すブーリアン値に、W0からW9は一時的なデータ格納に使用されました。
Pフィールドは8種類の基本命令を表現し、Qフィールドは命令のオペランドに対する間接参照のレベルを指定しました。条件分岐命令を除き、次に実行されるべき命令は現在のセルのLINKフィールドによって決定されました。IPLには約150種類の豊富な基本処理ライブラリが用意されており、シンボル比較、リスト属性操作、リスト要素の挿入・削除、算術演算、I/O処理などが含まれていました。また、現代のイテレータやフィルターに相当する「generator」と呼ばれる機能も存在しました。
歴史と影響
IPLは、開発者たち自身の初期の
人工知能研究プログラムの実装に利用されました。その最も有名な応用例は、アリストテレスの三段論法を用いて
バートランド・ラッセルらの『プリンキピア・マテマティカ』の定理を証明した画期的なプログラム「
Logic Theorist」(1956年)です。続く汎用問題解決プログラム「GPS」(1957年)や、
コンピュータチェスプログラム「NSS」(1958年)などもIPLで記述されました。サイモン氏は、
Logic Theorist開発のごく初期段階で、自身の子供たちを計算要素に見立てた人手によるシミュレーションを行ったというエピソードも残っています。
IPLにはいくつかのバージョンが存在しましたが、中でも1958年に登場したIPL-Vは
IBM 650、
IBM 704、IBM 7090など多くのコンピューターに移植され、最も広く利用されました。しかし、ほぼ同時期に開発されたLISPに取って代わられることになります。LISPはIPLの主要なアイデアを受け継ぎつつ、より単純で一貫性のある文法と、
ガベージコレクション機能を持つことで、記号処理言語の主流となっていきました。
IPLがコンピューター科学に残した功績は大きく、初めて
リスト操作、付属する形での
属性リスト、
アセンブリ言語の特性を一般化した形での
高階関数、そして「文字+番号」形式ではあったものの
シンボルによる計算といった、現代のプログラミングにおける基本的な概念を導入しました。これらの概念はLISPを通じて洗練され、さらに多くの後続言語へと影響を及ぼしました。IPLは短命ではありましたが、
人工知能研究の初期における重要なツールであり、現代の
プログラミング言語の基礎を築いた先駆的な言語として記憶されています。