Information Processing Language

Information Processing Language（IPL)とは、1956年ごろからランド研究所およびカーネギー工科大学にてアレン・ニューウェル、クリフ・ショー、ハーバート・サイモンが開発したプログラミング言語。ニューウェルは言語仕様設計と同時にアプリケーションのプログラミングも行い、ショーはシステムプログラミング、サイモンはアプリケーションのプログラマとしてもユーザーとしても活動した。
一般問題解決のための各種プログラミング要素を備えている。例えば、リスト、連想(association)、スキーマ（フレーム）、動的メモリ確保、データ型、再帰呼び出し、連想探索(associative retrieval)、引数としての関数、ストリーム、協調型マルチタスク（ノンプリエンプティブ・マルチタスクのこと）などである。IPLはアセンブリ言語のスタイルだったが、リスト処理の概念を開拓した。
言語仕様.
IPLは次のような要素を持つ。
IPLの主要なデータ構造はリストだが、多くの言語でのリストよりも複雑な構造を持っている。リストは実行も可能な一連のリンクされたシンボルから成り、それに加えて "description list" と呼ばれる属性名と値が交互に並んだリストが付属する。IPLには属性名を指定して対応する値にアクセスしたり値を変更したりするプリミティブがある。description list には（9-1 のような形式の）ローカル名が与えられる。下表は、S4とS5というシンボルを持つL1というリストと、それに付属するA1という属性にV1という値が対応しA2という属性にV2という値が対応している9-1という description list を示している。LINKが0となっているのは、リストの終端を意味する。100や101といったセル名は自動的に生成された内部シンボルであり無意味である。これらのセルはメモリ上ばらばらに存在する。L1は唯一の regional なシンボルなので、特別な場所に置かれグローバルに参照可能である。
IPLはリストを操作できるアセンブリ言語である。特別な用途のレジスタとして使われるセルが存在する。例えばH1はプログラムカウンタである。H1のSYMBフィールドは現在の命令の名前となっている。しかし、H1はリストとして解釈される。H1のLINKフィールドは今風に言えばコールスタックのトップへのポインタである。例えば、サブルーチン呼び出しではH1のSYMBをそのスタックにプッシュする。
H2はフリーリストである。プロシージャがメモリを確保したい場合はH2からセルを獲得する。逆にプロシージャが完了したらメモリをH2に置く。関数に入る際、引数リストはH0にある。関数から抜ける際には結果をH0に置く。多くのプロシージャは成功か失敗かを示すブーリアン型の結果を返すが、それをH5に置く。W0-W9という10個のセルは一時格納場所としてどこからでも使える。それらのセルに値をセーブしリストアする際にはプロシージャは「道徳的に束縛されている」（CACMの論文での言葉）。
Pフィールドでは8種類の命令を表せる。サブルーチン呼び出し、SからH0へのプッシュ/ポップ、SにあるシンボルとSに付属しているリストの間でプッシュ/ポップ、Sへの値のコピー、条件分岐といった命令がある。ここで、Sは命令のターゲットを意味する。SはQ=0ならSUMBフィールドの値を意味し。Q=1ならSYMBに名前があるセル内のシンボル、Q=2ならSYMBに名前があるセル内のシンボルの示すセル内のシンボルを意味する。つまり、Qはセルの間接参照のレベルを示している。条件分岐以外の命令では、次に実行すべき命令はセルのLINKフィールドが示している。
IPLには約150の基本処理のライブラリがある。例えば次のような処理が実装されている。
歴史.
IPLの最初の利用例は、『プリンキピア・マテマティカ』（バートランド・ラッセルとアルフレッド・ノース・ホワイトヘッドの労作）の中の定理を計算によって証明するデモンストレーションであった。サイモンの自伝 "Models of My Life" によると、このアプリケーションは人手によるシミュレーションで最初に試されたという。彼の子供たちを演算装置に見立て、各人にプログラムの状態変数を保持するレジスタの役目をするカードを持たせたという。
IPL は開発者自身の初期の人工知能プログラムの実装に使われた。Logic Theorist（1956年）、GPS（1957年）、コンピュータチェスプログラム NSS（1958年）などである。
IPL にはいくつかのバージョンがある。IPL-I（実装されず）、IPL-II（1957年、向け）、IPL-III（実装はされた）、IPL-IV、IPL-V（1958年、IBM 650、IBM 704、IBM 7090など広く実装された）、IPL-VI が知られている。
しかし、この言語はすぐにLISPに取って代わられた。LISPはほぼ同等の機能を持ちながら文法が単純でガベージコレクション機能を備えていた。
後のプログラミング言語への影響.
IPLは次のようなプログラミング言語機能を初めて導入した。
これら機能の多くは一般化され、洗練されてLISPに導入された。そして、LISPから後続の様々なプログラミング言語にも受け継がれた。