コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「Prolog」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
Cocoa ruto (会話 | 投稿記録)
つもりやもり (会話) による ID:80750065 の版を取り消し Wikibooksからの転載を削除
169行目: 169行目:
* 2016年 FLOPS で Ki Yung Ahn と Andrea Vezzosi の論文 Executable Relational Specifications of Polymorphic Type Systems で Prolog による Let多相の型推論器が発表されました。あまり話題にはなっていませんが、昨今の型理論には一階述語論理が用いられており、型システムの実装実験において極めて簡略に記述出来るため、利用されていく可能性があります。
* 2016年 FLOPS で Ki Yung Ahn と Andrea Vezzosi の論文 Executable Relational Specifications of Polymorphic Type Systems で Prolog による Let多相の型推論器が発表されました。あまり話題にはなっていませんが、昨今の型理論には一階述語論理が用いられており、型システムの実装実験において極めて簡略に記述出来るため、利用されていく可能性があります。
* Prolog向けの集合論的型システムが実用化されれば、関数型言語学会において古くから用いられてきた数式をより形式的にできるようになるかもしれません。
* Prolog向けの集合論的型システムが実用化されれば、関数型言語学会において古くから用いられてきた数式をより形式的にできるようになるかもしれません。

== Prolog言語の基本 ==
{{Wikibooks|Prolog/言語仕様|言語仕様}}
Prologプログラムは、ホーン節、もしくは単に節と呼ばれる形式の項を並べたものである。節は、頭部と本体部からなり、<syntaxhighlight lang="prolog">
頭部.
頭部 :- 本体部.
</syntaxhighlight>
の二形式があり得る。これはそれぞれ<code>頭部.</code>の形式が「A'''は'''Bである」、<code>頭部 :- 本体部.</code>の形式が「A'''ならば'''Bである」という命題の形式に対応する。節も項であって、項は関数子といくつかの引数からなる。節の関数子は <code>:-</code> であり、頭部と本体部はその引数である。関数子が<code>:-</code>の二引数の項が節である。<code>頭部.</code>の形式は実は、頭部 <code>:- true.</code>が省略されたものと見なされ、やはり <code>:-</code> を関数子として二引数の項である。頭部は項が連接することはできない(ホーン節)が、本体部は項が連接する、そういう項であり得る。

<code>頭部 :- 副目標<sub>1</sub>,副目標<sub>2</sub>, ... 副目標<sub>n</sub>.</code>は、これ全体を目標という。目標は副目標<sub>1</sub>...副目標<sub>n</sub>の連言である。ここで<code>目標 = ( 副目標<sub>1</sub>,副目標<sub>2</sub>, ... 副目標<sub>n</sub> )</code>と置けば、<code>頭部 :- 目標.</code>であり、やはりこの節の形式も、関数子 ':-' の二引数の項であることが分かる。複数の副目標はカンマで区切られているが、このカンマは論理積を意味する。節は、その頭部の形式、すなわち関数子とその引数の数が同一の形式を持つ述語と呼ばれる単位で管理される。プログラムは項の集合であり、節の集合であると同時に、述語の集合でもある。Prologはこの項、節、述語だけでその形式を表現できる点で、他のプログラム言語とは著しく異なる。これはPrologの理論的な背景が論理学にあり、この中の概念のみで構成されて、発展してきたからである。このような節の集合をあらかじめ用意してそれを定義した上で、ある命題が真であるかどうか問うことを質問という。節の集合、つまり述語の集合をあらかじめ用意する方法については、後出の"Prologプログラミング"で述べる。Prologの処理系は、人間の入力した質問に対して、頭部が形式的に一致する節があるか調べ、あった場合はその本体部に記述されている命題と一致する節があるか[[再帰]]的に調べる。ここでは定義されたもの(処理系があらかじめ用意した組込述語も含めて)だけが、真になり、定義されていないものは必ず偽となる(閉世界仮説)。

具体的な例を見よう。「ソクラテスは人間である」「人間は死ぬ」を {{lang|en|Prolog}} で記述すると以下のようになる。ここで X は変数である。
<syntaxhighlight lang="prolog">
人間(ソクラテス).

死ぬ(X) :- 人間(X).
</syntaxhighlight>

<code>人間(ソクラテス). </code> は「AはBである」の命題の形式に対応し、ここでは、Aはソクラテス、Bは人間である。同様に、<code>死ぬ(X) :- 人間(X). </code> は「AならばBである」であり、Aは<code>人間(X)</code>に、Bは<code>死ぬ(X)</code>に対応している。システムに対して以下のように入力すると、true が返される。<syntaxhighlight lang="prolog">
?- 死ぬ(ソクラテス).
</syntaxhighlight>
これは「ソクラテスは死ぬか」と質問したことに対して、システムが内部で推論を行なって、既知の知識から答えを出したものである。それではここでの既知の知識とはなんであろうか。それは、<syntaxhighlight lang="prolog">
人間(ソクラテス).

死ぬ(X) :- 人間(X).
</syntaxhighlight>
であり、内部で行っている推論とは、?- 死ぬ(ソクラテス). から 死ぬ(X) :- 人間(X). により導出されて、
<syntaxhighlight lang="prolog">
?- 人間(ソクラテス).
true

</syntaxhighlight>
が、確認される過程である。今度は以下のように入力してみる。これは、「死ぬのは誰か」と質問したことと同じになる。この場合もシステムが内部で推論を行なって、死ぬ(X)を満たすXを表示する。<syntaxhighlight lang="prolog">
?- 死ぬ(X).
X = ソクラテス
</syntaxhighlight>

他のプログラム言語に比べると質問を基本的骨格としている点でユニークであるが、更に、{{lang|en|Prolog}} は複数の計算結果があり得るという点でも極めてユニークなプログラム言語である。先のプログラム例を拡張して
<syntaxhighlight lang="prolog">
人間(ソクラテス).
人間(アリストテレス).

死ぬ(X) :- 人間(X).
</syntaxhighlight>
とした場合、死ぬ(X)を満たすXは複数(ソクラテスとアリストテレス)がありうる。述語 人間 に複数の節を設けて、その引数にソクラテス、アリストテレスと列記して行くだけで、質問に対して複数の解を処理系が列挙するようになる。他の言語でこういう機能を実現する時に見られるような、手続き的なループや情報を管理する配列の添字管理のようなものは全く現れない。多くの{{lang|en|Prolog}} 処理系ではこのような複数解が存在する時に新たな解を得る場合は<syntaxhighlight lang="prolog">
?- 死ぬ(X).
X = ソクラテス ;
X = アリストテレス
</syntaxhighlight>
と ";"(セミコロン)記号を用いて他の解を得る。";"はこの解は真ではない、という質問者の意思表示である。ここではインタプリタのトップからの質問、すなわち対話環境にあるから、<code>X = アリストテレス</code>が処理系からの質問者に対する応答、質問となっている。質問者は「この解は真ではない」と否定することができる一方、呈示された解(ソクラテスまたはアリストテレス)を真と決定することもできる。このように処理系から見て外部からの介入によって真を得ることを非決定性という。この非決定性がコンピュータ言語としての{{lang|en|Prolog}} の際立った特徴の一つである。
もうすこし具体的な{{lang|en|Prolog}}プログラムの例を以下に示す。「<code>%</code>」から行末までは注釈である。<syntaxhighlight lang="prolog">
% member(X,Y)はXがリストYの要素として含まれているときに成功する。
% そうでないときは失敗する。

member(X, [X|_]). % Xがリストの先頭要素と同じ場合
member(X, [_|Y]) :- member(X, Y). % それ以外の場合
</syntaxhighlight>

<code>member(X,Y)</code> は要素XがリストYのメンバーであるかを調べるプログラムであると同時に、「要素XがリストYのメンバーである」という関係も宣言的に表している。実行例を以下に示す。要素XがリストYのメンバーであれば成功する。<syntaxhighlight lang="prolog">
?- member(サザエ, [波平,サザエ,マスオ]).
true.
</syntaxhighlight>

要素XがリストYのメンバーでなければ失敗する。
<syntaxhighlight lang="prolog">
?- member(サザエ, [ワカメ,マスオ,タラオ]).
false.
</syntaxhighlight>

Xの部分を変数のままにすると、リストYのメンバーである要素が結果として返る。すなわち、ジェネレータとして働く。
<syntaxhighlight lang="prolog">
?- member(X, [ワカメ,マスオ,タラオ]).
X = ワカメ ;
X = マスオ ;
X = タラオ
</syntaxhighlight>

二つのリストの共通メンバーを求めるには単純に","で区切って並べればよい。この","はANDの意味を持つ。
<syntaxhighlight lang="prolog">
?- member(X, [波平,サザエ,マスオ]), member(X, [ワカメ,マスオ,タラオ]).
X = マスオ
</syntaxhighlight>

要素Xを指定しリストYを変数のままにすると、それらがメンバーであるリストが結果として返る。
<syntaxhighlight lang="prolog">
?- member(波平, Y), member(サザエ, Y), member(マスオ, Y).
Y = [波平,サザエ,マスオ|_G001]
</syntaxhighlight>
上の"_G001"は{{lang|en|Prolog}}処理系が作成した仮の変数で、リストの後半が不定であることを示す。


== Prologプログラム例 ==
== Prologプログラム例 ==
{{Wikibooks|Prolog|プログラム例}}
{{Wikibooks|Prolog|Prolog}}
=== [[クイックソート]] ===
=== クイックソート ===
<syntaxhighlight lang="prolog">
<syntaxhighlight lang="prolog">
quicksort([],[]).
quicksort([],[]).

2020年12月13日 (日) 09:12時点における版

Prolog
パラダイム 論理プログラミング
登場時期 1972年
設計者 Alain Colmerauer 他
型付け 動的型付け
主な処理系 AZ-Prolog, BProlog, Ciao Prolog, ECLiPSe, GNU Prolog, K-Prolog, Open Prolog, Poplog, Prolog Cafe, Prolog.NET, P#, SICStus Prolog, Strawberry Prolog, SWI-Prolog, YAP-Prolog
影響を与えた言語 Erlang, KL0, ESP, Guarded Horn Clauses, KL1, Concurrent Prolog, PARLOG, Mercury英語版, Oz, Strand, Visual Prolog英語版
プラットフォーム クロスプラットフォーム
テンプレートを表示

Prolog(プロログ)は論理プログラミング言語の一つであり、該当分野で最もよく知られている論理型言語の代表格である。主に人工知能研究や計算言語学との関連性を持つ。定理証明エキスパートシステム自動計画自然言語処理とも繋がりが深い。一階述語論理形式論理を基礎にして、事実群と規則群の表現および関係の観点に立った宣言型パラダイムに準拠しており、その関係に則った質問によって計算が開始されるという性質を持つ。

Prologは、1972年にマルセイユ大学のアラン・カルメラウアーとフィリップ・ルーセルによって開発された。フランス語の「programmation en logique」がその名の由来である[1]。Prologの誕生にはエディンバラ大学のロバート・コワルスキが考案したホーン節が大きく寄与している。カルメラウアーによる元祖版はマルセイユPrologと呼ばれている。その後、コワルスキの門弟のデービッド・H・D・ウォレンが1977年に改訂開発したエディンバラProlog(DEC-10 Prolog)が標準になってPrologは広く普及した[2]

概要

1972年ごろにフランスのアラン・カルメラウアーとフィリップ・ルーセルによって考案された[2]

成立の事情から、Prolog プログラムは論理式とみなされ、その実行は述語論理によって述語が定義された環境における定理証明に擬して解釈されることが多い。利用者は論理プログラミングの枠組みを、取り分け述語論理を学習することで、この枠組みに極めて忠実なこの言語の基礎的な構造のほとんどを理解できる。その言語仕様はこの枠組み以外には考案者たちも含めてそれ以上の拡張をほとんど行っていないため、他のプログラム言語とは異なり、学習しなくてはならない概念や用語もまた、述語論理のものだけでこと足りる。基本的に計算機科学の新しい概念や新しい手法とは無縁である。ただし、SWI-Prolog等の処理系では様々な機能拡張の試みが行われている。一階述語論理は型理論や操作的意味論の研究論文で多数用いられており、今後、最注目される可能性がある。

述語論理と論理プログラミング

Prologプログラム一階述語論理に基づいてデータ間の関係を示す命題として記述され、処理系がそれらに単一化(ユニフィケーション)と呼ばれるパターンマッチングを施しながら、与えられた命題が成立するか再帰的手続きによって探索している。

プログラムの実行は述語集合が定義された環境の元で、質問することによってなされるが、これは反駁という述語論理的な証明過程を模して、処理系が用意する導出木と呼ばれるグラフをたどって解を得る過程である。 Prolog のもととなるこの演繹手法は導出と呼ばれ、自動定理証明の研究において Prolog 開発以前からよく知られていた。Prolog は、導出において節を頭部が一つの命題からのみなるホーン節に限定したもので、この場合の導出をSLD導出(Selective Linear resolution for Definite clause)と呼ぶ。ホーン節に限定しているということは、つまり、Prolog は任意の述語をそのまま扱えるわけではない。Prolog が述語の形式をホーン節に限定した理由は、もし頭部に項の連言を認めるならば、導出時の計算量が爆発的に増大して、全ての解を得ることの保証が難しくなることが必至だからである。

述語論理を論理的な背景に持つことによって、Prolog のプログラムはその正しさを確認することが比較的容易である。同時に、プログラマは Prolog でプログラミングすることが何を意味するかを明確に理解した上で、プログラムを書いていくことができる。

非述語論理的な立場

上記は Prolog の一つの解釈である。一方、Prolog というプログラム言語を述語論理という枠にはめないで捉える立場もある。導出、単一化、非決定性、双方向性、関係データベースといったこの言語に独特の機能とその表現力、記述力に着目し、そのプログラム言語としての可能性を率直に評価しようとするものだ。

新たに Prolog を学びたいと思う人は、他のプログラム言語を全く知らなくても、ソフトウェア科学的な予備知識や概念に不通であっても、単一化という単純なルールをほとんど唯一の基軸として、パズル的な、あるいはゲーム的な感覚にだけ導かれて、プログラムを簡単に書き進むことができる。さらに、どの言語にも比して平坦で、平明な言語構造を持つ Prolog はラベル名(アトム、関数名、述語名)に適切な意味性を付与することにより、自然言語の領域にも接近したプログラミングが期待できるほとんど唯一の言語でもある。

十分述語論理的な教養を持った上で Prolog を学び、そのプログラムを書くならば、短期間で高度で安定したプログラムを書くことができる。しかし、それを前提としないでも、Prolog は冒険的で、未知の領域に満ちたプログラム言語なのである。

実はこれらの主張は、述語論理的な主張に隠れて、これまであまり強調されたことがなかった。

このような立場や主張が生まれる背景には、Prolog が期待されたほどにはソフトウェア革新の担い手になり得ていない理由が、その後の数理論理学の学問的な評価をもって、プログラム言語としての可能性を十分検証することを放棄して、定理証明といった狭い目的へ封じ込めようとする風潮を生んだことにある、という反省がある。そのことを踏まえて、Prolog が述語論理から成立したことにこだわらず、実在するプログラム言語として自由な視点からこの言語を見直そうとするものである。

記号処理用言語・人工知能言語

PrologLISP の資産の多くを継承して間違いなく記号処理用の言語であるが、人工知能言語として分類されることも多い。これは、人工知能の世界では述語論理が古くから理論的な柱の一つとなっているからである。述語論理を基礎とするトップ・ダウン式の問題解決と同じく述語論理を基礎とする Prolog の駆動機構の相性は当然良いため、人工知能研究に広く利用されてきた。特にエキスパートシステムで多用されるプロダクションシステムにおいては、ルールを自然に自ら動的に変更できる能力を持つことと、後ろ向き推論と呼ばれる推論が Prolog の導出過程そのものであることから、その最も主要な記述言語の位置を占めてきた。

宣言型言語

Prolog は一階の述語論理に対応することから論理型言語に分類される汎用言語であるが、その主張の一行一行を独立して論理式とほとんど等価な表現で行うことから、最も代表的な宣言型言語と見なされている。Prolog のプログラム単位である述語の各節の本体に現れる質問単位である副目標数は平均5個以内と極めて少ない。この副目標と各節の頭部に現れる引数の組み合わせによって得られる関係が述語の意味を構成している考えられる。これが宣言型とされるゆえんである。

<頭部> :- <本体>.  % Prologの節は頭部と本体によって構成される。

% 述語定義は複数の節からなる。本体は幾つかの副目標からなる。
% 副目標の全てが真となった時に節の宣言は成立する(節は真となる)。

述語名(引数_1,引数_2) :- <副目標_1>,<副目標_2>.
述語名(引数_1,引数_2) :- <副目標_3>
・・・

単一化

単一化は1960年代の述語論理理論の発展の鍵となった概念であるが、Prolog が述語論理に導かれて機械による自動証明を実現するためのプログラム言語として成立したことから、必然的にこの言語の必須の最も重要な機構となった。単一化は副目標(質問)と対応する定義節の頭部のパターンが完全に一致するか、調べることで、節の選択[3]を可能にする。基本的な言語仕様の章で詳述するが、Prolog の実行順序等の制御は単一化のからくりを利用してプログラミングされる。

簡単なからくりでかつ極めて強力な単一化であるが実行コストも大きい、すなわち実行速度が遅くなる原因となる。さらに、パターンとして認識することと引き換えに、引数での関数評価は不可能になった。独立して節の本体で式評価を記述しなくてはならないため、数値計算ではやや冗長になる。 これらの点は、単一化の強力さとのトレードオフの関係になっている。

動的型付け

型付けは動的型付けに分類できるが、言語仕様の中に型概念は登場しない。上記の単一化、バックトラッキング、と論理変数の束縛においては独特のものがあり、その実行は型推論の実行過程に酷似している。既に Prolog はその引数の引渡し時に単一化という厳密なパターンマッチングを施すことに多大なコストを掛けた。単一化だけでプログラムをコントロールできる言語が Prolog であるといっても過言ではない。この単一化のみによる簡素で強力なプログラムコントロールの足を引っ張ることに成り兼ねない、型付けの強化は、Prolog 言語とその支持者によって受け入れられることはないだろう。

非オブジェクト指向言語

Prolog は言語による思考をモデル化して主語・述語といった意味での文中の述語を特に重視して記述する系である。この一点からも、対象物を中心に記述していくオブジェクト指向とは距離が大きい。述語論理以前にオブジェクトありきとする立場を一般には取らない。

いくつかの処理系では、オブジェクト指向言語としての拡張が行なわれているが、オブジェクトを中心に設計されることは、論理プログラミングを重視して記述される限りほとんどない。分類するならば、非オブジェクト指向言語に分類される。オブジェクト指向に拡張された言語としては

が存在する。

モジュラープログラミング

Prolog はオブジェクト指向とは疎遠であるが、一方、述部を重視する系であるという点から見ても、モジュラープログラミングとは近い関係にある。Prolog の述語をモジュールとして捉えた場合、多くは再帰的で宣言的であり、情報強度は極めて強く、情報結合度は極めて弱い。引数にはリスト以外の構造体(複合項)が来ることはほとんどなく明解であり、記述単位は数行と極めて短くかつ記述は簡潔である。モジュラープログラミングを突き詰めたものが Prolog だといってもよいように見える。しかし、Prolog をモジュラープログラミングとして評価した場合、疑問符の付くであろう部分もないわけではない。それはPrologの引数の入力・出力の関係が多くの場合双方向であり、意味的にも多義性を持つという点である。モジュラープログラミングは「〜を〜する」というような単一機能にまとめることが推奨されたが、この原則に反する。さらにPrologは複数の解を示すことがありうる。この性質を非決定性(後述)というが、実はこのことは定義された述語全体がコルーチンでありうることを意味する。単一の入口点による制御を良しとするモジュラープログラミングの原則にここでも反する。

オンメモリデータベース

後に述べるが Prolog の述語はその構造が頭部と本体と分かれていて、本体はルールを意味するため、全体として、ルールを持ったデータベース、演繹データベースとして捉えることができる。これはPrologプログラム全体がデータベースであるということだから、データベースの表現としては最強のクラスに属する。一方、事実を表す本体のない(強制的に真)頭部のみの定義節による述語は関係データベースとその集合論的な性質で一致する。収集した情報を一つの述語に対して多数の頭部のみを持った節の集まりとして定義することにより、オンメモリ関係データベースを構築することが可能である。しかし、Prologをデータベース管理システムとして捉えた場合、 assertretractsetofbagoffindall という組込述語を持つこと以外には、管理機構としての特別の組込述語が用意されている訳ではなく、ディクショナリ管理などのための述語定義をユーザが追加する必要がある。

非決定性と双方向性

関数型言語等、他のプログラミング言語と比較しての Prolog の特長は、上記、一階述語論理に基づくこと、単一化、データベース言語的性格の他に、非決定性双方向性が挙げられる。

非決定性は、解が唯一とは限らない場合、処理系側から見てひとつの解に決定できない場合、外部からの選択の余地を与える。そういうことが当然可能なこととして述語は定義されていく。インタプリタトップではなく、導出を繰り返すプログラム内部にあっては、処理系側とした所を述語と置き換えて考えると、非決定性の述語の解を決定するのは、前方または後方に連接する質問(副目標)である。前方の副目標群から引数経由で与えられる情報によって副目標は一つの解を作り出すが、この解が真であるとするのは最終的に後方に連接する副目標である。この後方に連接した副目標が全て真となった場合に限り副目標は真となる。後方に連接する副目標のどれかが真にならなかった場合は、それが存在すればであるが別解を用意しなくてはならない。ここでも非決定性の述語、ここでは副目標から見ての解の決定権は、外部にあるということになる。

非決定性は導出の過程、取り分けバックトラックアルゴリズムと一体化しており、Prolog プログラムの制御の根幹のひとつである。ただ、非決定性述語実行時に見られる論理変数の 束縛→解放→再束縛という遷移、すなわち一度束縛されたものが別のものに再度束縛されるということを好ましくないとする見方もある。

双方向性は、述語が実行された場合の返り値は真または偽だけであり、その代わりとして引数内の変数で値の授受を終始するのだが、このとき、入力として使われた変数が出力に、出力として使われていた変数が入力として使うことのできる述語となることがある。この性質を双方向性という。多くの場合、双方向性を持つ述語はそれ自体多義性を持つ。例えば append という3引数の述語は第一引数と第二引数に具体的なリストが来て呼ばれた時は、リストを結合する意味でよいが、第三引数がリストで第一引数と第二引数が変数の状態で呼ばれた場合その意味は、リストを分解する、がふさわしい。既に存在するリストを、それが結合されて存在したものと考え、それではどのように結合されていったか、あるいは、どのような組み合わせで結合されていったのかを、示していると解釈できる。

このような、双方向性は Prolog の述語自らがリバースエンジニアリング的開示能力を持ち、それを示していると捉えることができる。この性質は、Prologを含む論理型プログラム言語の持つ際立った特徴であり、プログラム作成時はもちろん、テスト、デバッグなどの検証の各段階でプログラムコードに対する見通しを向上させる。

Prolog プログラミングの難しさ

プログラマは引数の単一化、再帰/失敗駆動等のプログラムパターンの選択、非決定性、双方向性といった特長をできる限り生かすことなどに配慮しながら、述語の骨格を決めプログラミングを進める。しかし、これらの特長、性質は複合した場合には相当に複雑であり、制御上相反する部分も多々ある。Prolog では、述語論理を逸脱して計算量/資源量/制御の調整に当たる述語「!」(カット)を導入してこの問題に対処しているが、Prolog プログラミングの難しさはこの調整部分に集中している。

歴史

誕生

Prolog の性格上、その歴史には定理の自動証明の研究が大きく関係している。1930年にジャック・エルブランは自動定理証明やPrologのベースとなる数理論理学上の基本定理であるエルブランの定理を発表した。エルブランの論文には Prolog で必須の単一化アルゴリズムもすでに含まれていた[4]

1950年代以降、計算機上での定理証明の研究が活発になり、ギルモアのアルゴリズム(1960)やデービス・パトナムのアルゴリズム(1958,1960) 、プラウィツによる定理証明への単一化アルゴリズムの導入(1960)などを経て、1965年のロビンソンによる導出原理 や1960年代後半のラブランドによるモデル消去の証明手続きの成果からひとつの結実期を迎えた。その数年後の1971年マルセイユ大学のアラン・カルメラウアーとフィリップ・ルーセルのグループは自動定理証明システムとフランス語の自然言語解析システムとを組み合わせたコンピュータとの自然言語対話システムを作成していた。この際に自然言語解析システムも自動定理証明システムと共通の論理式という枠組みで構築できることに気が付き、論理式をそのままプログラムとして実行できる最初の Prolog を1972年に完成させた[5]。これは数千年に及ぶ人類の叡智である論理学の成果をプログラム言語に置き換えたものと言えるが、現在の Prolog でプログラムの制御に使われるカットオペレータに相当する機能が最初から導入されるなど[6]、現在の Prolog と同様、単なる定理証明システムではなくプログラミング言語として設計されたものだった。以下にその当時の Prolog プログラムの一部を示す。論理変数名の最初の文字が "*" で始まるなど、現在の Prolog とはシンタックスが異なる。

READ
  RULES
  +DESC(*X,*Y) -CHILD(*X,*Y);;
  +DESC(*X,*Z) -CHILD(*X,*Y) -DESC(*Y,*Z);;
  +BROTHERSISTER(*X,*Y) -CHILD(*Z,*X) -CHILD(*Z,*Y) -DIF (*X,*Y);;
  AMEN

コワルスキとDEC-10Prolog

彼らグループに理論的な助言を与えていたエジンバラ大学のロバート・コワルスキとデービッド・H・D・ウォレン[7]は汎用機 DECsystem10 上にマルセイユ大学とはシンタックスが異なる処理系を作り上げた。これは後に DEC-10 Prolog と呼ばれることになるが、ISO 標準規格を含む今日動作する Prolog 処理系はほとんどがこの系統のシンタックスに従っている。

desc(X,Y) :- child(X,Y).
desc(X,Z) :- child(X,Y),desc(Y,Z).
brothersister(X,Y) :- child(Z,X),child(Z,Y),dif(X,Y).

コワルスキはその後、インペリアル・カレッジ・ロンドンに移り、1979年に集大成ともいえる「Logic for Problem Solving」を著し、その後のこの言語と論理プログラミングの研究に決定的な影響を与えた。

コワルスキの活動と DEC-10 Prolog の存在によって、英国は Prolog 研究の中心地となった。エジンバラ大学のW・F・クロックシン[8]とC・S・メリシュ[9]の著わした「Programming in Prolog」は長く Prolog のバイブル本として利用された。エジンバラ大学からSRIインターナショナルに転じたディビッド・ウォレンは1983年 Prolog の仮想マシンコードであるWarren's Abstract Machine英語版(WAM)を発表した。この後の Prolog 処理系の実装は、一旦C言語などでこの仮想マシンコードを実装して、その上で Prolog のソースコードをこのマシンコードに変換するコンパイラを用意するという手順を踏むことによって、開発を簡素化し実装上の標準化を図ることが普通になった。日本の新世代コンピュータ技術開発機構Prolog マシン PSI は1987〜1988年頃に開発された PSI2 からこれを採用したし、その後開発された Prolog 処理系の多くはこの方式に従った。

1976年にSRIに留学していた古川康一はカルメラウアーらの Prolog 処理系のリストを見つけ帰国時に電子技術総合研究所に持ち帰った[10]。当時電子技術総合研究所で推論機構研究室長をしていた淵一博はこのリストを解析して Prolog 処理系を走らせ、ルービックキューブを解くプログラムを作成するなど論理プログラミングに対する理解を深めていった[11]

1978年MITに留学中の中島秀之が「情報処理」誌に紹介記事を寄稿して、Prolog は日本でも広く知られるようになった。

新世代コンピュータ技術開発機構とProlog

1970年代終り頃、日本では通産省の電子技術総合研究所の淵一博を中心とするグループが論理プログラミングの重要性を認識して、日本のコンピュータ技術の基礎技術としてこれを取り上げることを提案する。これが最終的に1980年代の新世代コンピュータ技術開発機構の発足と活動につながった。総額約570億円の国家予算を約束されて1982年に新世代コンピュータ技術開発機構(ICOT)は活動を開始する。Prolog を含む論理型言語はこの研究の核言語と位置づけられ世界的な注目を浴びることとなる。約10年間の研究活動中に Prolog と論理プログラミングの研究は急激に深化した。実際1980年からの20年間に Prolog をメインテーマにした日本語の書籍は約50冊発刊された。ICOT の研究員は積極的に Prolog の啓蒙に努め、講習会、チュートリアル、ワークショップを年に一度ならず開催した。ICOT が主催したロジック・プログラミング・コンファレンスは1983〜1985年頃をピークに若い研究者達を刺激した。研究活動前半の期間では論理型言語の実用性を証明するために、Prologマシンが設計され、三菱電機と沖電気によって製作され、ICOT の他大学等研究機関に配布された。この個人用逐次推論マシン PSI の機械語 KL0 は単一化やバックトラックなど Prolog の基本的特徴を完全に備えていた。この KL0 によって、PSI のマイクロコードを制御した。KL0 を基礎として、オペレーティングシステム SIMPOS が設計され、これを記述するために、Prolog にオブジェクト指向プログラミングを取り入れた ESP[12]が近山隆により設計されて使われた。ESPは多重継承を特徴とする当時としては先鋭のオブジェクト指向言語であったが、後にカプセル化の不備などが指摘されて、今日あまり話題となることはない。しかし、OSを記述するという課題を通じて、論理型言語にオブジェクト指向言語的要素を加えることによって、可読性が高まりプログラム管理がしやすくなることが確認された。その反面、Prolog のみでオペレーティングシステムを完全に記述してみる絶好の機会を逸したことも確かである。ESPはPSIを前提にせずに利用できるように、C言語で書き直したCESPが開発されたが、これが普及への起爆剤になることはなかった。後に述べるように、PrologのISO標準規格のモジュール仕様としてESPの採用が否決された1995-6年頃以降はほとんど利用されることはなくなった。

ここまで述べたように、Prologは ICOT によって持ち上げられた言語 Prolog との印象が強いが、Prolog というプログラミング言語から見ての ICOT の影響は実は限定的だった。淵所長ら ICOT の主研究テーマは並列論理型言語にあり、研究後半では Prolog そのものからは離れて行くことになる。PSI に使用した電子基盤を利用して並列推論マシン PIM が製作されて、Guarded Horn Clauses(GHC)に基づく並列演算処理を追加した KL1 が設計された。この環境に依存する形で、並列論理プログラム言語のKL1知識プログラミング全般の研究に利用された。PSI と SIMPOS を使った研究も続けられはしたが、割り当てられた研究員の数は極めて少なかった。

ICOT の活動を総括して、知識プログラミング各課題において準備不足からくる未消化を指摘する向きが強いのだが、こと Prolog から見ての前半期の活動は、今日語られることも少ないが、極めて充実したものであったといえる。

ICOT の活動盛期の1984年京都大学の学生3名[13]が研究課題として製作した Prolog-KABA がその性能の高さとアセンブラで記述されたことからくる高速性で世界を驚かせた。この処理系は MS-DOS 上で製品化されて Prolog の普及に大きく貢献した。Successful pop や末尾再帰の最適化など高い安定した性能で黎明期のパソコン上のビジネスソフトの基礎言語としての展開も期待されたが、16ビットの整数しか持たず、浮動小数点数も扱えない仕様であったため、この分野への展開は起こらなかった。この点はアセンブラで記述されて簡単には拡張できない点が裏目に出た。結果としてこの仕様の乏しさが、日本のビジネスソフトが知識プログラミングの水準との間に横たわる分水嶺を越えることができなかった原因の一つとなった。

1990年代とISO標準規格

1990年代に入ると制約論理プログラミングが注目され処理系が多数誕生した。これは Prolog から見ると引数の論理変数間の関係(制約)を記述可能に拡張したものである。制約論理型言語は、変数評価に遅延実行などを持ち込むことが必要となるが、連立方程式をはじめとする多くの課題で Prolog より記述が柔軟になる。Prolog の組込述語には引数が変数で渡るとエラーとなるものが多く、このため Prolog プログラマは変数が具体化されるように副目標の記述順序に気を配る必要がある。結果としてプログラミングに逐次性が生じる。制約論理プログラミングにおいては、後に変数が具体化されたときに検査されるための変数の間の制約を記述するだけで、この逐次性の拘束を解決して通過することができる。実はこの制約はPrologから見ても自然な拡張であり、むしろ Prolog の単一化が制約論理プログラミングの制約を「=」のみに限定したものだと解釈することができる。しかし、簡素で逐次的な性格を強く持つ Prolog の処理系に慣れた利用者が、制約論理プログラミングの述語中に更に変数制約の宣言を追加しなくてはならない負担を、受け入れているとは言い難い。制約論理プログラム処理系が Prolog のそれに置き換わる気配は、2013年11月現在においてもない。

ISO の標準化作業は1987年頃から作業委員会(WG17[14])が作られ、日本委員も情報処理学会から15名ほどがこれに加わった。1995年 ISO標準規格がISO/IEC 13211-1 Prolog-Part 1: General Coreとして制定された。さらに、2000年にはISO/IEC 13211-2 Prolog-Part 2: Moduleとしてモジュール仕様が追加して規格化された。モジュール仕様については日本委員から、ICOTによって作成されたESP(Extended Self-contained Prolog)を以てその標準とする案が出されていたが、これは否決された。

ISO標準規格はエジンバラ仕様 DEC-10Prolog を基調に既に一家をなしていた Quintus Prolog など有力ベンダと主としてヨーロッパの学者を主体にこれに日本などの委員が参加して作成された。この規格は現在 Prolog 処理系の製作者に指針を与え、大きな逸脱を心理的に妨げる役割を果たしているが、組込述語の個々の仕様ではベンダの意向が強く反映されたものの、全体としては最初に述べた論理学的立場を尊重して保守的で極めて小さな仕様となっている。そのため多くの Prolog 処理系はこの規格の述語を搭載しつつ、独自の拡張部分を修正したり削除することに消極的である。結果として個々の処理系の互換性の乏しさは残り、それは Prolog の弱点として認識されている。

JIS規格も一旦は2001年にJIS X 3013:2001が、"標題 プログラム言語Prolog―第1部:基本部"が要約JISとして発行されたが、2012年1月に何ら実効を見ること無く、「周知としての目的は終了した」として廃止された。

人工知能ブームとProlog

日本において、ICOT の活動時期から1990年代前半に掛けては、いわゆる人工知能ブームの時期であり、人工知能研究への期待はこの時期再び異様に高まった。LISP マシンによる医療情報エキスパートシステムでの成果は、人工知能の研究の成果の一部は情報処理に於いても利用可能なのではないかとの夢を抱かせた。このような評価の中で Prolog は人工知能のアセンブリ言語的な位置づけを期待された。知識情報処理はこの水準の言語を基礎にその上側に築かれるべきだとの意味である。手っ取り早く利用可能な人工知能技術としてエキスパートシステムが選別され、これを支えるナレッジエンジニアの存在とそれを養成するための教育が必要とされた。Prolog はその中心に存在した。日本も例外ではないが、日本以外の国では特に、Prolog の名著は1990年代前半に刊行されている。これは、ICOT の活動とは若干のタイムラグがあるが、この時期社会的に 人工知能向き言語としての Prolog に大きな期待が寄せられていたことの証しである。エキスパートシステムはビジネス分野において広範囲に応用可能な基礎技術であったが、このような低水準な分野への適用はあまり試みられず、この分野からの Prolog 言語への要請はほとんど見られないまま終った。

機械翻訳などの自然言語処理もまた人工知能の一翼を担う分野であるが、歴史的経緯から人工知能ブーム以前から、この言語に最も期待が掛けられた分野であった。しかし、左再帰問題の回避でトップダウン解析の明解さをいきなり殺がれた。さらに句構造文法への適用においては、Prolog が得意とする、句構造に分解して意味に相当するグラフを形成することの他に、極めて膨大な辞書を構造体として定義する必要が展望された。この辞書作成は Prolog とは直接関係しないタスクであることから、次第に Prolog は句構造文法によるアプローチの前線から後退してしまった。統計的言語処理のアプローチでは、単一化等に多くの計算量を費やす Prolog は大量データを扱うのに不向きとされて、利用されることはほとんどない。自然言語処理のテキストの多くが Prolog を用いて解説されているにも関わらず、期待が大きかった割に実務的には、表面に現れている成果はIBM社のワトソン程度にとどまり、自然言語処理はむしろ Prolog 評価の足を引っ張る傾向にさえある。

ICOT以後の日本における衰退

日本においては、ICOT 解散後数年を経て、論理プログラミングと Prolog は急激に下火となる。先にあげたコワルスキの成果があまりにも完成されたものでその研究成果の範囲を越えることが難しかったこと、歴史的にプログラム言語でありながら論理学からの逸脱を厳しく制限され、自由なアイデアによるプログラミング言語としての発展・展開が困難に見えたことも研究者・技術者を離れさせた。そして、人工知能ブームもまた去って行った。企業等で続けられた研究開発も発表される機会がProlog産業応用シンポジウム(INAP)などに限定され、人々の目に Prolog の成果が触れることは極端に少なくなった。ICOT の多大な研究成果がネット上に閲覧可能な状態で置かれたが、Prolog 言語の処理系はインターネット時代の技術・流れに乗れず、初心者・初学者が利用するためのネット上での情報も他の有力言語に比べて少なく、新しい利用者を惹きつけることができなかった。パソコンのオペレーティングシステムとして Microsoft Windows が一般に普及し始めると、初心者教育にウィンドウの部品の展開を題材とするのに適したオブジェクト指向言語に人気が集中し、Prolog は動作の遅い外れた言語のイメージを持たれるようになる。さらに21世紀に入ると Prolog がクラス概念を持たないため、マイクロソフト社による .NET アーキテクチュアの共通言語基盤(CLR)の対象言語から外され、この傾向に拍車をかけた。ついには枯れた言語というニュアンスを含んでではあるが、「化石言語」と揶揄されるまでに至ったのである。

今日

盛時の勢いは失ったものの、Prolog は各教育機関で主として論理学の教材として利用され続け、今日まで数万人の人が Prolog の講座を受講している。実務的に利用される機会が少ないにも関わらず、その素養を持つ人が大量に存在するという特異な位置にあるプログラム言語となっている。また、多くのプログラミング言語でその言語上にPrologインタプリタを制作してみることが難度の高い学習課題の一つとして採用され、その結果としてもPrologを理解しているプログラマは増加する傾向がある。

  • 2011年夏 ブルース・A・テイト[15]著『7つの言語 7つの世界』が出版され、その7つの言語の一つとして Prolog が紹介されたことから、多くの人々の関心を呼び起こし、この言語は突然に息を吹き返した。ダニエル・ジャクソン[16]著『抽象によるソフトウェア設計』も翻訳されて述語論理に基礎を持つ形式記述言語 alloy が注目されるなど、Prolog に極めて親近した領域での議論がようやく活発になった。
  • 2012年 イワン・ブラトコ[17]著「Prolog Programming for Artificial Intelligence」の第四版が11年ぶりに刊行されて、人々に Prolog は今でも活火山的な存在であることを印象付けた。また、世界的に利用されているアプリケーション自動生成ツール GeneXusProlog によって書かれてからそれを他の利用言語に変換されて製品化されていることや、IBM 社のワトソンの根幹部分である言語解析部分と質問の生成部分を現在も Prolog が担っていることなどが次々と喧伝されて、応用面でも現役言語であることが改めて認識されつつある。さらに世界的な関数型言語への急激な関心の高まりによって、関数型言語と類縁性の高い論理型言語の盟主であり、人気関数型言語 Erlang の原像でもある Prolog への関心は再び強まってきた。
  • 2013年 IBMはワトソンの商用化を積極的に進めることとし、研究開発要員を2000名に増強することを発表した。さらに2014年秋、ソフトバンクとの間でワトソンの日本語化で提携することが発表された。ソフトバンクは既にADSLの故障診断をPrologで開発して利用してきた実績があり、既に公開され、2015年春出荷が予定されている感情認識パーソナルロボットPepperでも中核部にPrologを採用することが予想されている。同社がワトソンと強く結びつくことによって、Pepperが将来ワトソンから情報を受け取ることによって、どのように強化されて、変化していくのかということが俄然興味深い問題に浮上した。同時に、その二つのシステムに跨って、Prologがどのような関わりを持つのか、役割を担うのかということも注目されている。

今後

  • 2016年 FLOPS で Ki Yung Ahn と Andrea Vezzosi の論文 Executable Relational Specifications of Polymorphic Type Systems で Prolog による Let多相の型推論器が発表されました。あまり話題にはなっていませんが、昨今の型理論には一階述語論理が用いられており、型システムの実装実験において極めて簡略に記述出来るため、利用されていく可能性があります。
  • Prolog向けの集合論的型システムが実用化されれば、関数型言語学会において古くから用いられてきた数式をより形式的にできるようになるかもしれません。

Prologプログラム例

クイックソート

quicksort([],[]).
quicksort([X|Xs], Ys) :-
        partition(Xs, X, Smaller, Bigger),
        quicksort(Smaller, L1),
        quicksort(Bigger, L2),
        append(L1, [X|L2], Ys).


partition([], _, [], []).
partition([X|Xs], Pivot, [X|Smalls], Bigs) :-
        X @< Pivot,
        partition(Xs, Pivot, Smalls, Bigs).
partition([X|Xs], Pivot, Smalls, [X|Bigs]) :-
        X @>= Pivot,
        partition(Xs, Pivot, Smalls, Bigs).

Pivotとは軸要素のことである。軸要素より小さい要素を整列、軸要素より大きい要素も整列。それを軸要素を挟んで結合したものが整列したリストだ。実行例はこうなる。

?- quicksort([3,2,1,6],L).

L = [1,2,3,6]

ハノイの塔

ハノイの塔は最も Prolog 向きの課題のひとつとして知られる。ここでは、N枚の円盤を三本の柱のうち、一番左の柱から右の柱に移すケースを示す。円盤は下から上に向かうほど小さくなるように積まれ、常にその状態が維持されなくてはならない。

:- op(500,xfx,から).
:- op(400,xf,).

ハノイの塔(N,_移動履歴) :-
        length(Ln,N),
        ハノイの塔(Ln,左柱,中柱,右柱,_移動履歴).

ハノイの塔([_],_,_,_,[_ から _ ]).
ハノイの塔([_|Ln],_,_,_,_移動履歴) :-
        ハノイの塔(Ln,_,_,_,_移動履歴_1),
        ハノイの塔(Ln,_,_,_,_移動履歴_2),
        append(_移動履歴_1,[_ から _ |_移動履歴_2],_移動履歴).

冒頭、から を中置演算子、 を後置演算子として定義している。それを使って _移動前の位置 から _移動後の位置 という項を表現して、それを履歴として残している。このプログラムは Prolog が宣言的であることを顕著に示す好例である。この述語で述べられていることは、三回が一組となって同じパターンが繰り返されるということ。さらに最も下の一枚が順に、この課題では右柱に積まれるのだが、新しい最下層の円盤が右柱の最上位に積まれた時には、それより上の塔は中柱、左柱と交互に完全に積み上がっている。それを、ハノイの塔述語の本体の二番目の副目標で、どちらの柱を起点として以後の移動を開始するかを、引数の位置を入れ替えることだけによって、表現している。このように全体の骨格と僅かな引数の置き換えだけによって、手続的動作の全てを暗示している。このような表現力に対して「宣言的」と言うのである。実行例はこうなる。

?- ハノイの塔(4,L),
   member(A,L),
   writef('%t\n',[A]),
   fail;
   true.
左柱 から 中柱 
左柱 から 右柱 
中柱 から 右柱 
左柱 から 中柱 
右柱 から 左柱 
右柱 から 中柱 
左柱 から 中柱 
左柱 から 右柱 
中柱 から 右柱 
中柱 から 左柱 
右柱 から 左柱 
中柱 から 右柱 
左柱 から 中柱 
左柱 から 右柱 
中柱 から 右柱 
true.

nクイーン

nクイーン問題も Prolog 向き問題の代表のひとつである。チェス盤が8×8であることから、8クイーンとして課題になることが多いが、ここでは盤面の大きさを一般化したnクイーンである。チェスのクイーンは縦横斜め、盤面の自分の位置から盤面の端までが全て利き筋となる駒である。この駒を各行に適宜ひとつずつ配置して、全てのクイーンの利き筋に他のクイーンがいないように、全ての列にクイーン配置せよという問題である。一つの解は列番号のリストで得られる。nクイーンの Prolog 定義は随分と工夫され、多くの作品がある。ここでは最も一般的な戦略の解法を示す。駒の利き筋という概念を示すために、可能な限り説明的な Prolog をコードを試みている。途中に現れる Qs という論理変数に、一つずつ解候補のクイーン位置が成長していく。

nクイーン(_nクイーン,_一解) :-
        '1からnまでの数リストを得る(縦横の利き筋検査はこれを行ごとに一つずつ選択することで回避される)'(_nクイーン,_数リスト),
        行ごとに順に駒を置き利き筋を調べて一解を得る(_数リスト,[],_一解).

行ごとに順に駒を置き利き筋を調べて一解を得る([],_一解,_一解).
行ごとに順に駒を置き利き筋を調べて一解を得る(_位置リスト,Qs,_一解) :-
        '駒の位置と残り駒の位置リストを得る(この選択自体が縦横の利き筋検査になっている)'(_駒の位置,
                                                                                               _位置リスト,_残り駒の位置リスト),
        斜めの利き筋に駒はない(_駒の位置,1,Qs),
        行ごとに順に駒を置き利き筋を調べて一解を得る(_残り駒の位置リスト,[_駒の位置|Qs],_一解).

'駒の位置と残り駒の位置リストを得る(この選択自体が縦横の利き筋検査になっている)'(_駒の位置,
                                                                          [_駒の位置|_残り駒の位置リスト],_残り駒の位置リスト).
'駒の位置と残り駒の位置リストを得る(この選択自体が縦横の利き筋検査になっている)'(X,[H|T],[H|T1]) :-
        '駒の位置と残り駒の位置リストを得る(この選択自体が縦横の利き筋検査になっている)'(X,T,T1).

斜めの利き筋に駒はない(_,_,[]).
斜めの利き筋に駒はない(Q,_隔たり,[Q1|Qs]) :-
        Q + _隔たり =\= Q1,
        Q - _隔たり =\= Q1,
        _隔たり_2 is _隔たり + 1,
        斜めの利き筋に駒はない(Q,_隔たり_2,Qs).

'1からnまでの数リストを得る(縦横の利き筋検査はこれを行ごとに一つずつ選択することで回避される)'(_nクイーン,_数リスト) :-
        findall(M,between(1,_nクイーン,M),_数リスト).

これは非決定的な述語である。上記の定義では、表示幅の制限から引数の途中で改行している部分があるが、引数の区切りである「,」の前後であるならば、これは構わない。6クイーンの場合の実行例を示す。

?- nクイーン(6,L).
L = [5, 3, 1, 6, 4, 2] ;
L = [4, 1, 5, 2, 6, 3] ;
L = [3, 6, 2, 5, 1, 4] ;
L = [2, 4, 6, 1, 3, 5] ;
false.

ここでは4つの解が得られたが、8クイーンだと92解になる。

処理系

多くの処理系は Prolog の基本機能以外に、制約プログラミング並行プログラミングのための拡張機能や Constraint Handling Rules などの各種言語をライブラリとして含んでいる。

処理系 オープンソース 有償・無償の別 準拠規格 備考
Amzi!Prolog 有償 ISO規格
AZ-Prolog 個人/学術は無償 ISO/DEC-10 Prolog 日本語対応 Prolog-KABA互換(グラフィックスを除く)
B-Prolog 学術は無償
Ciao Prolog ISO規格
GNU Prolog ISO規格
Jekejeke Prolog 無償 ISO規格
K-Prolog 有償 ISO規格 日本語対応
micro-Prolog 学術研究用 [18] CP/M80 上で動作
MINERVA 有償 ISO規格 業務用、Java ベース
Open Prolog 無償 ISO規格 Mac OS
Prolog Cafe Prolog プログラムを Java プログラムに変換
Prolog.NET .NETProlog を使用できる
P# PrologプログラムをC# プログラムに変換
Qu-Prolog マルチスレッド処理系
Rebol Prolog
SICStus Prolog 有償 ISO規格 多くのオペレーティングシステムに対応。Java.NET でのウェブアプリケーション開発可能。
Prolog for Squeak Squeak に統合された Prolog 環境
Strawberry Prolog
SWI-Prolog ISO規格 多くのオペレーティングシステム、Unicodeに対応
TuProlog
Visual Prolog 個人は無償 Windows専用
XSB
YAP Prolog ISO規格 Prolog コンパイラ。

書籍

  • 『プログラムの理論 コンピュータ・サイエンス研究所シリーズ』 Zohar Manna 著 五十嵐滋 訳 1975/1/25 日本コンピュータ協会
  • 『人工知能の基礎 知識の表現と理解』 Daniel G.Bobrow Allan Collins 共著 淵一博 石崎俊 板橋秀一 太田耕三 大谷木重夫 黒川利明 桜井彰人 佐藤泰介 島田俊夫 田中穂積 田村浩一郎 溝口文雄 元吉文雄 山口喜教 横井俊夫 横山昌一 訳 1978/9/20 近代科学社
  • 『日常言語の論理学』 オールウド・アンデソン・ダール 著 公平珠躬 野家啓一 訳 1979/9/25 産業図書 ISBN 4-7828-0011-8
  • 『日本語の文法と論理』 坂井英寿 著 1979/11/25 勁草書房
  • 『人工知能 岩波講座 情報科学-22』 白井良明 辻井潤一 共著 1982/4/9 岩波書店
  • 『人工知能の原理 コンピュータ・サイエンス研究書シリーズ26』 Nils.j.Nilsson 著 白井良明 辻井潤一 佐藤泰介 訳 1983/1/15 日本コンピュータ協会
  • 『最適化 岩波講座 情報科学-19』 西川偉一 三宮信夫 茨木俊秀 共著 1982 / 9 / 10 岩波書店
  • 『言語工学 人工知能シリーズ2』 長尾真 著 1983/6/25 昭晃堂 ISBN 4-7856-3042-6
  • 『Prologプログラミング』 W.F.Clocksin C.S.Mellish 共著 中村克彦 訳 1983/6/25 マイクロソフトウェア
  • 『機械知能論 人工知能シリーズ1』 志村正道 著 1983/7/15 昭晃堂 ISBN 4-7856-3043-4
  • 『Prolog』 中島秀之 著 1983/8/25 産業図書
  • 『PROLOG入門 ソフトウェアライブラリI』 後藤滋樹 著 1984/4/10 サイエンス社 ISBN 4-7819-0352-5
  • 『Prolog入門』 太細孝 鈴木克彦 伊藤ひとみ 佐藤裕幸 共著 1984/8/30 啓学出版 ISBN 4-7665-0146-2
  • 『人工知能2 マグロウヒル コンピュータシリーズ』 E.リッチ 著 廣田薫 富村勲 訳 1984/9/1 マグロウヒル ISBN 4-8950-1172-0
  • 『知識表現とProlog/KR』 中島秀之 著 1985/2/28 産業図書
  • 『Prologプログラミング入門』 安部憲広 著 1985/3/20 共立出版 ISBN 4-320-02237-8
  • 『エキスパート・システム ソフトウェア サイエンス シリーズ』 フレデリック ヘイズーロス レナルドA.ウォーターマン 編 ダグラスB.レナート 著 中島秀之 白井英俊 田中卓史 中川裕志 鈴木浩之 松原仁 寺野隆雄 斎藤康巳 平賀譲 片桐恭弘 訳 1985/6/27 産業図書 ISBN 4-7828-5002-6
  • 『Prologとその応用2 プログラム作成支援 エディタ設計 自然言語設計 データベース』 溝口文雄 武田正之 畝見達夫 溝口理一郎 共著 1985/7/15 総研出版 ISBN 4-7952-6307-8
  • 『人工知能の世界 コンピュータに関心あるすべての人のために』 田村隆一 柳原圭雄 唐沢博 共著 1985/9/16 技術評論社 ISBN 4-87408-168-1
  • 『日常言語の推論 認知科学選書2』 坂原茂 著 1985/10/1 東京大学出版会 ISBN 4-13-013052-8
  • 『PROLOGデータベース・システム』 D.リー 著 安部憲広 訳 1985/10/1 近代科学社 ISBN 4-7649-0106-4
  • 『Prologのソフトウェア作法 岩波コンピュータサイエンス』 黒川利明 著 1985/11/8 岩波書店 ISBN 4-00-007681-7
  • 『Prologと論理プログラミング』 中村克彦 著 1985/12/25 オーム社 ISBN 978-4-275-07266-5
  • 『新世代プログラミング』 井田哲雄 尾内理紀夫 黒川利明 竹内彰一 外山芳人 淵一博 共著 1986/2/10 共立出版 ISBN 4-320-02259-9
  • 『micro-PROLOGプログラム コレクション 人工知能のための』 山田眞市一 著 1986/3/25 サイエンス社 ISBN 4-7819-0435-1
  • 『知識ベース入門』 石塚満 上野春樹 大須賀節雄 奥野博 小山照夫 白井良明 辻井恭一 速水悟 共著 1986/4/20 オーム社 ISBN 4-274-07287-8
  • 『知識の学習メカニズム 知識情報処理シリーズ2』 国藤進 有川節夫 篠原武 北上始 原口誠 武脇敏晃 堀浩一 共著 1986/5/5 共立出版 ISBN 4-320-02262-9
  • 『知識指向言語Prolog 人工知能プログラミングへの序曲』 小谷善行 著 1986/5/20 技術評論社 ISBN 4-87408-827-9
  • 『協調型計算システム --分散型ソフトウェアの技法と道具立て--』 R.E.フィルマン D.P.フリードマン 共著 雨宮真人 尾内理紀夫 高橋直久 訳 1986/7/1 マグロウヒル ISBN 4-89501-030-9
  • 『BASICで学ぶPROLOGシステム 言語と構造理解のために』 市川新 著 1986/8/20 啓学出版 ISBN 4-7665-0294-9
  • 『Prolog-KABA入門 岩波コンピュータサイエンス』 柴山悦哉 桜川貴司 萩野達也 共著 1986/9/22 岩波書店 ISBN 4-00-007687-6
  • 『Prolog入門』 古川康一 著 1986/9/30 オーム社 ISBN 4-274-07308-4
  • 『自然言語の基礎理論』 石川彰 松本裕治 向井国昭 安川秀樹 安食敏宏 共著 1986/10/16 共立出版 ISBN 4-320-02264-5
  • 『Prolog 人工知能用言語シリーズ 1』 新田克己 佐藤 泰介 共著 1986/10/25 昭晃堂 ISBN 978-4-7856-3601-2
  • 『micro PROLOGはじめてのプログラミング』 ヒュー・ド・サラム 著 倉田和彦 山田和美 訳 1986/10/ 31 啓学出版 ISBN 4-7665-0306-6
  • 『知識情報処理 知識工学講座1』 大須賀節雄 著 1986/11/25 オーム社 ISBN 4-274-07321-1
  • 『知識工学 人工知能シリーズ10』 小林重信 著 1986/12/10 昭晃堂 ISBN 4-7856-3068-X
  • 『RUN/Prolog入門 データベースとしての活用と述語解説』 小島政行 著 1986/12/10 アムコインターナショナル ISBN 978-4-8705-0034-1
  • 『エキスパート・システム入門』 安部憲広 滝寛和 共著 1986/12/15 共立出版 ISBN 4-320-02297-1
  • 『エキスパートシステム --知識工学とその応用--』 上野晴樹 著 1986/12/25 オーム社 ISBN 4-274-07318-1
  • 『エキスパート・システム 基礎概念と実例』 J.L.アルティ M.J.クームス 共著 太原育夫 訳 1987/1/10 啓学出版 ISBN 4-7665-0312-0
  • 『知識の表現と利用 知識工学講座2』 上野春樹 小山照夫 岡本敏雄 松尾文雄 石塚満 共著 1987/2/10 オーム社 ISBN 4-274-07331-9
  • 『RUN/PROLOG ばじめての人工知能言語』 斎藤孝 著 1987/2/20 HBJ ISBN 4-8337-8511-0
  • 『論理による問題の解法 ---Prolog入門 情報処理シリーズ8』 R.コワルスキ 著 浦昭二 山田眞市 菊池光昭 桑野龍夫 訳 1987/3/20 培風館 ISBN 4-563-00788-9
  • 『知識の獲得と学習 知識工学講座3』 大須賀節雄 佐伯胖 小橋康章 大槻説乎 北橋忠宏 田中譲 篠原武 宮原哲浩 原口誠 共著 1987/3/20 オーム社 ISBN 4-274-07346-7
  • 『Prologプログラミング入門 RUN/Prologを用いた』 鑰山徹 著 1987/4/1 工学図書株式会社 ISBN 4-7692-0163-X
  • 『人工知能コンピュータ 判断・推論のしくみ』 秋田輿一郎 著 1987/5/25 電気書院 ISBN 4-485-57102-5
  • 『Prologランニングブック RUN/Prolog演習プログラム 下』 横井与次郎 著 1987/5/25 ラジオ技術社 ISBN 4-8443-0185-3
  • 『Prologランニングブック RUN/Prolog演習プログラム 上』 横井与次郎 著 1987/5/25 ラジオ技術社 ISBN 4-8443-0180-2
  • 『AI入門』 矢田光治 著 1987/5/25 オーム社 ISBN 4-274-07355-6
  • 『はじめてのRUN/PROLOG』 成田佳応 谷田部賢一 共著 1987/5/30 ナツメ社 ISBN 4816307001
  • 『論理プログラミングの基礎』 J.W.ロイド 著 佐藤雅彦 森下真一 訳 1987/6/30 産業図書 ISBN 978-4-7625-5003-4
  • 『プログラム変換 知識処理シリーズ7』 佐藤泰介 二木厚吉 玉木久夫 二村良彦 竹内彰一 安村通晃 吉田紀彦 共著 1987/8/1 共立出版 ISBN 4-320-02267-X
  • 『並列論理型言語GHCとその応用 知識情報処理シリーズ6』 竹内彰一 上田和紀 野田泰徳 松本裕治 杉本勉 田中二郎 太田由紀子 共著 1987/9/10 共立出版 ISBN 4-320-02266-1
  • 『はじめてのProlog Prolog-KABAによる人工知能へのアプローチ』 舟本奨 著 1987/9/20 ナツメ社 ISBN 4-8163-0712-5
  • 『TURBO PROLOGトレーニングマニュアル』 小林鉾史 著 1987/10/3 JICC出版局 ISBN 4-88063-335-6
  • 『RUN/Prologとその応用』 杉原敏夫 著 1987/11/30 工学図書株式会社 ISBN 4-7692-0176-1
  • 『Prologプログラミング入門 RUN/Arity』 大原茂之 著 1988/2/25 オーム社 ISBN 4-274-07401-3
  • 『コンピュータ言語進化論 思考増幅装置を求める知的冒険の旅』 Howard Levine Howard Rheingold 共著 椋田直子 訳 1988/3/21 アスキー出版局 ISBN 4-87148-301-0
  • 『Prologで学ぶAI手法 推論システムと自然言語処理』 高野真 著 1998/3/31 啓学出版 ISBN 4-7665-0110-1
  • 『パソコンエキスパートシステム -低価格ツールによるエキスパートシステムの構築手順-』 OHM編集部編 1988/4/30 オーム社 ISBN 4-274-07409-9
  • 『述語論理と論理プログラミング』 有川節夫 原口誠 共著 1988/5/10 オーム社 ISBN 4-274-07386-6
  • 『知識の帰納的推論 知識処理シリーズ3』 E.Y.Shapiro 著 有川節夫 訳 1988/7/20 共立出版 ISBN 4-320-02263-7
  • 『知識と推論 岩波講座 ソフトウェア科学-14』 長尾真 著 1988/7/25 岩波書店 ISBN 4-00010-354-7
  • 『記号処理プログラミング 岩波講座 ソフトウェア科学-8』 後藤滋樹 著 1988/8/10 岩波書店 ISBN 4-00-010348-2
  • 『Prologの技芸』 L.Sterling E.Shapiro 共著 松田利夫 訳 1988/8/1 共立出版 ISBN 4-320-09710-6
  • 『TURBO PROLOG入門』 Carl Townsent 著 倉谷直臣 酒見高広 訳 1988/8/25 オーム社 ISBN 4-274-07449-8
  • 『知識プログラミング 知識処理シリーズ8』 鈴木浩之 小野典彦 中島秀之 国藤進 石塚満 松田哲史 井下博史 有馬淳 佐藤健 房岡璋 高橋和子 著 1988/9/1 共立出版 ISBN 4-320-02268-8
  • 『Prologプログラミング入門 体験学習ビジネスマンのための』 高橋三雄 著 1988/9/30 オーム社 ISBN 4-274-07442-0
  • 『エキスパートシステム 知識工学講座5』 上野晴樹 小山照夫 共著 1988/12/20 オーム社 ISBN 4-274-07462-5
  • 『並列Prologコンピュータ データフロー処理によるアプローチ』 マイケル・J・ワイズ 著 曽和将容 訳 1989/1/10 啓学出版 ISBN 4-7665-0345-7
  • 『コンピュータによる推論技法』 L.ウォス R.オーバーピーク E.ラスク J.ボイル 共著 川越恭二 久野茂 前田康行 光本圭子 訳 1989/1/20 マグロウヒル ISBN 4-89501-292-1
  • 『TURBO Prolog プログラミング』 Information&computing 玉井浩 著 1989/2/25 サイエンス社 ISBN 978-4-7819-0539-6
  • 『新しいプログラミングパラダイム』 相場亮 井田哲雄 大須賀昭彦 加藤和彦 柴山悦哉 田中二郎 富樫敦 横内寛文 横田一正 共著 1989/11/10 共立出版 ISBN 4-320-02493-1
  • 『制約論理プログラミング』 坂井公 佐藤洋裕 田中二郎 相場亮 川村十志夫 橋田浩一 丸山文宏 渡辺俊典 佐藤由美子 森文彦 戸沢義夫 昭尾雅之 森下真一 共著 1989/11/20 共立出版 ISBN 4-320-02469-9
  • 『自然言語解析の基礎』 田中穂積 著 1989/11/27 産業図書 ISBN 4-7828-5127-8
  • 『定性推論 知識処理シリーズ別巻1』 淵一博 溝口文雄 古川康一 安西祐一郎 田中博 西田豊明 本田一賀 開一夫 堂下修司 清水周作 大木優 元田浩 共著 1989/2/15 共立出版 ISBN 4-320-02468-0
  • 『人工知能』 志村正道 著 1989/4/20 オーム社 ISBN 4-274-07506-0
  • 『人事情報エキスパートシステム』 三重野博司 著 1989/7/20 オーム社 ISBN 4-274-07521-4
  • 『Prologプログラミング入門 KE養成講座』 黒川利明 田中直之 共著 1989/7/25 オーム社 ISBN 4-274-12857-1
  • 『データベースと知識ベース 新しい情報システムを目指して』 大須賀節雄 著 1989/7/30 共立出版 ISBN 4-274-07520-6
  • 『わかる:-Prolog』 塚本龍男 著 1989/11/1 共立出版 ISBN 4-320-02337-4
  • 『入門TURBO PROLOG』 ダン・シェーファー 著 北脇和夫 北脇庸子 訳 1989/11/1 啓学出版 ISBN 4-7665-0990-0
  • 『TURBO Prolog エキスパート・システム設計入門』 Carl Townsend 著 玄光男 佐々木正仁 訳 1989/11/28 HBJ出版局 ISBN 4-8337-8030-5
  • 『OA実務家の書いたエキスパート・システムの本』 三菱商事(株)システム企画部OA技術チーム編 1990/2/1 日本能率協会 ISBN 4-8207-0664-0
  • 『法律家のためのコンピュータ利用法 論理プログラミング入門』 加賀山茂 著 1990/2/10 有斐閣 ISBN 4-641-07541-7
  • 『Prologへの入門 PrologとAI』 I.Bratko 著 安部憲広 訳 1990/3/20 近代科学社 ISBN 4-7649-0165-X
  • 『パソコン言語による人工知能(AI)プログラミング PC-9800対応 Prolog/LISP/Smalltalk/C/FORTRAN/COBOL/BASIC』 舟本奨 著 1990/3/20 ナツメ社 ISBN 4-8163-1035-5
  • 『作品としてのプログラム 黒川利明 著 1990/4/27 岩波書店 ISBN 4-00-005403-1
  • 『自然言語理解と論理プログラミング』 Y.Dahi P.Saint-Dizier 共著 西田豊明 松本裕治 上原邦昭 訳 1990/4/30 近代科学社 ISBN 4-7649-0163-3
  • 『Prologで作る数学の世界 Prologそして集合-位相-群』 飯高茂 著 1990/6/20 朝倉書店 ISBN 4-254-11054-5
  • 『Prolog詳説 対話形式によるアプローチ』 ラマンチャンドウン・バラス 著 斉藤重光 舟本奨 訳 1990/6/30 啓学出版 ISBN 4-7665-1078-X
  • 『Prologユーティリティライブラリ』 ボグダン・フィリビッチ 著 中原誠 伊藤哲郎 訳 1990/8/25 海文堂出版 ISBN 4-303-71700-2
  • 『SF的Prologの世界 コンピュータウイルス盛衰記』 福田敏宏 田村三郎 田中正彦 共著 1990/9/20 現代数学社 ISBN 4-7687-0195-7
  • 『Prologによる論理プログラミング入門』 小川束 著 1990/10/31 啓学出版 ISBN 4-7665-1081-X
  • 『人工知能における知識ベースシステム』 ランドール・デービス ダグラス・B・レナート共著 溝口文雄 諏訪基 実近憲昭 平井成興 仁木和久 豊田順一 上原邦昭 河合和久 山口高平 溝口理一郎 訳 1991/4/10 啓学出版 ISBN 4-7665-1100-X
  • 『情報の論理数学入門 ブール代数から述語論理まで』 小倉久和 高濱徹行 共著 1991/4/20 近代科学社 ISBN 4-7649-0180-3
  • 『自然言語処理入門 情報・電子入門シリーズ』 岡田直之 著 1991/5/20 共立出版 ISBN 4-320-02434-6
  • 『エキスパートシステム MARUZEN Advanced Technology 電子・情報・通信編』 石塚満 小林重信 薦田憲久 竹垣盛一 寺野隆雄 山崎知彦 共著 丸善株式会社 1991/9/30 ISBN 4-621-03622-X
  • 『人工知能概論』 荒屋真二 著 共立出版 1991/11/5 ISBN 4-320-02605-5
  • 『Prologの冒険 アドベンチャーゲームを作りながらPrologをマスターしよう』 Dennis Merritt 著 岩谷宏 訳 1992/10/21 ソフトバンク ISBN 4-89052-344-8
  • 『Prologマシン』 金田悠紀夫 著 1992/4/7 森北出版 ISBN 4-627-80810-0
  • 『Prolog入門 図解コンピュータシリーズ』 江村潤朗監修 瀬下孝之 著 1992/7/15 オーム社 ISBN 4-274-07723-3
  • 『楽しいプログラミングⅡ記号の世界』 中島秀之 上田和紀 共著 1992/5/29 岩波書店 ISBN 4-00-007755-4
  • 『Prologを楽しむ』 松田紀之 著 1993/1/31 オーム社 ISBN 4-2740-7749-7
  • 『Micro-PROLOG ロジックプログラミングによる問題解決』 K.L.クラーク F.G.マッケイブ 著 溝口文雄 大和田勇人 訳 1993/1/31 啓学出版 ISBN 4-76651-165-4
  • 『人工知能最前線 財務エキスパートシステム』 D.E.オゥレアリ P.R.ワトキンス 共著 佐伯光彌 光村司 西ヶ谷邦正 斎藤孝一 三藤利雄 訳 1993/4/30 学友社 ISBN 4-7620-0483-9
  • 『Prologを楽しむ』 松田紀之 著 1993/1/31 オーム社 ISBN 4-274-07749-7
  • 『情報学概論 Prologプログラミング』 吉田要 著 1993/3/25 八千代出版 ISBN 4-8429-0874-2
  • エキスパートシステムII 技術の動向 朝倉AIらいぶらり 溝口理一郎 著 1993/6/20 朝倉書店 ISBN 4-254-12623-9
  • 『意思決定支援システムとエキスパートシステム シリーズ・経営情報システム』 飯島淳一 著 1993/10/23 日科技連出版社 ISBN 4-8171-6162-0
  • 『自然言語 情報数学セミナー』 郡司隆男 著 1994/1/15 日本評論社 ISBN 4-535-60811-3
  • 『Prolog入門. 例題演習』 塩野充 著 1995/4/30 オーム社 ISBN 4-274-07642-3
  • 『Prologを学ぶ 文化とその実践』 杉崎昭生 著 1995/5/25 海文堂 ISBN 4-303-71690-1
  • 『知識処理論 知識・情報メディアシリーズ』 萩野達也 著 1995/6/30 産業図書 ISBN 4-7828-5302-5
  • 『スケジューリングとシミュレーション』 田中克己 石井信明 共著 1995/10/20 コロナ社 ISBN 4-339-08357-7
  • 『形式言語と有限オートマトン入門 例題を中心とした情報の離散数学』 小倉久和 著 1996/10/15 コロナ社 ISBN 4-339-02339-6
  • 『AIプログラミング PrologとAI I.Bratko 著 安部憲広 訳 1996/4/10 近代科学社 ISBN 4-7649-0254-0
  • 『エージェントアプローチ 人工知能』 スチュワート・ラッセル ピーター・ノーヴィグ 共著 古川康一 訳 1997/12/15 共立出版 ISBN 4-320-02878-3
  • 『関数プログラミング 情報数学セミナー』 萩谷昌己 著 1998/3/30 日本評論社 ISBN 4-535-60817-2
  • 『自然言語・意味論・論理』 赤間世紀 著 1998/9/15 共立出版 ISBN 4-320-02908-9
  • 『形式言語の理論 情報科学コアカリキュラム講座』 西野哲朗 石坂裕毅 共著 1999/7/31 丸善株式会社 ISBN 4-621-04626-8
  • 『人工知能の基礎 情報科学コアカリキュラム講座』 西田豊明 著 1999/9/30 丸善株式会社 ISBN 4-621-04646-2
  • 『新しい人工知能 発展編』 前田隆 青木文夫 共著 2000/3/10 オーム社 ISBN 4-274-13198-X
  • 計算論理に基づく 推論ソフトウェア論 山崎進 著 2000/5/26 コロナ社 ISBN 4-339-02373-6
  • 『知的エージェントのための集合と論理 インターネット時代の数学シリーズ6』 中島秀之 著 2000/6/10 共立出版 ISBN 4-320-01645-9
  • 『人工知能の基礎理論』 赤間世紀 著 2000/12/25 電気書院 ISBN 4-485-66246-2
  • 『Interlog コンピュータ言語』 吉川永一 著 2002/3/29 東京図書出版会 ISBN 4-434-03554-1
  • 『帰納論理プログラミング Inductive Logic Programming』 古川康一 尾崎知伸 植野研 共著 2001/5/25 共立出版 ISBN 4-320-12014-0
  • 『知識と推論 Information Science & Engineering-T1』 新田克己 著 2002/6/10 サイエンス社 ISBN 4-7819-1008-4
  • 『法律人工知能 法的知識の解明と法的推論の実現』 吉野一 著 2002/2/29 創成社 ISBN 4-7944-4030-8
  • 『人工知能 IT Text』 本井田真一 松本一教 宮原哲浩 永井保夫 著 2005/7/20 オーム社 ISBN 4-274-20106-6
  • 『組み込みソフトウェアの設計&検証 組込み動作からRTOSを使った,ツールによる動作検証まで』 藤倉俊幸 著 2006/9/1 CQ出版社 ISBN 978-4-7898-3344-8
  • 『言語・知識・信念の論理 知の科学』 東条敏 人工知能学会 共著 2006/3/15 オーム社 ISBN 4-274-20211-9
  • 『論理と計算のしくみ』 萩谷昌己 西崎真也 共著 2007/6/27 岩波書店 ISBN 978-4-00-006191-9
  • 『コンピュータプログラミングの概念・技法・モデル Concepts Techniques and Modelsof Computer Programming』 ピーター・ヴァン・ロイ セイフ・ハリディ 共著 羽永洋 訳 2007/11/7 翔泳社 ISBN 978-4-7981-1346-3
  • 『On Lisp』 Paul Graham 著 野田開 訳 2008/3/23 オーム社 ISBN 978-4-274-06637-5
  • 『数理論理学 コンピュータサイエンス教科書シリーズ 18』 古川康一 向井国昭 共著 2008/6/27 コロナ社 ISBN 978-4-339-02718-1
  • 『新 人工知能の基礎知識』 太原育夫著 2008/6/30 近代科学社 ISBN 978-4-7649-0356-2
  • 『Prologで学ぶAIプログラミング I/OBOOKS』 赤間世紀 著 2008/11/10 工学社 ISBN 978-4-7775-1402-1
  • 『メディア情報学入門』 鈴木昇一 著 2010/4/1 東京図書出版会 ISBN 4862234062
  • 『実用 Common Lisp (IT Architects’Archive CLASSIC MODER)』 ピーター・ノーヴィッグ著 松本宣男 訳 2010/5/11 翔泳社 ISBN 978-4798118901
  • 『7つの言語 7つの世界 Ruby lo Prolog Scala Erlang Clojure and Haskell』 Bruce A. Tate 著 まつもとゆきひろ監訳 田和数 訳 2011/7/25 オーム社 ISBN 978-4-274-06857-7
  • 『入門 自然言語処理』 Steven Bird Ewan Klein Edward Loper 共著 萩原正人 中山敬広 水野貴明 訳 2010/11/8 株式会社オーム社 ISBN 978-4-87311-470-5
  • 『アルゴリズム設計マニュアル上』 S.S スキーナ 著 平田富夫 訳 2012/1/31 丸善出版株式会社 ISBN 978-4-621-08510-3
  • 『知識基盤社会のための人工知能入門 計測・制御テクノロジーシリーズ 16』 国藤進 中田豊久 羽山徹彩 共著 2012/5/9 コロナ社 ISBN 978-4-339-03366-3
  • 『プログラミング言語温故知新―人工言語の継承を学ぶ』 土屋勝著 2014/9/1 カットシステム ISBN 978-4-87783-328-2
  • 『イラストで学ぶ 人工知能概論』 谷口忠大 著 2014/9/25 オーム社 ISBN 978-406-1538238
  • 『数理論理学-合理的エージェントへの応用に向けて』 加藤暢,高田司郎,新出尚之 共著 2014/10/30 コロナ社 ISBN 978-4-339-02489-0
  • 『知能の物語』 中島秀之著 2015/5/31 公立はこだて未来大学出版会発行 近代科学社発売 ISBN 978-4-7649-5552-3

国際会議

  • INAPInternational Conference on Declarative Programming and Knowledge Management
  • FLOPS ー International Symposium on Functional and Logic Programming

脚注

注釈

出典

  1. ^ Alain Colmerauer, Philippe Roussel. The birth of Prolog, p.2.
  2. ^ a b Robert Kowalski. The Early Years of Logic Programming, p.38.
  3. ^ : resolution、融合
  4. ^ Buss, Samuel R., "On Herbrand's Theorem".
  5. ^ Alain Colmerauer and Philippe Roussel, The birth of Prolog, p.6.
  6. ^ Alain Colmerauer and Philippe Roussel, The birth of Prolog, pp.14-15.
  7. ^ : David H.D.Warren
  8. ^ W. F. Clocksin
  9. ^ : C. S. Mellish
  10. ^ 古川 康一, p.5.
  11. ^ 古川 康一, p.5.
  12. ^ : extended self-contained Prolog
  13. ^ 萩野達也,桜川貴司,柴山悦哉
  14. ^ https://www.complang.tuwien.ac.at/ulrich/iso-prolog/SWI7_and_ISO
  15. ^ : Bruce A. Tate
  16. ^ : Daniel Jackson
  17. ^ : Ivan Bratko
  18. ^ https://www.researchgate.net/publication/277325585_Aspects_of_Prolog_history_Logic_Programming_and_Professional_Dynamics

参考文献

  • William F. Clocksin, Christopher S. Mellish: Programming in Prolog: Using the ISO Standard. Springer, 5th ed., 2003, ISBN 978-3540006787.
  • Leon Sterling, Ehud Shapiro: The Art of Prolog: Advanced Programming Techniques, 1994, ISBN 0-262-19338-8.
  • D.L. Bowen, L. Byrd, F.C.N. Pereira,L.M. Pereira and David H.D. Warren: DECsystem-10 PROLOG USER'S MANUAL, University of Edinburgh,1982.
  • ISO/IEC 13211: Information technology — Programming languages — Prolog. International Organization for Standardization, Geneva.
  • Robert Kowalski. The Early Years of Logic Programming, CACM January 1988.
  • Alain Colmerauer, Philippe Roussel. The birth of Prolog, in The second ACM SIGPLAN conference on History of programming languages, p. 37-52, 1992.
  • David H D Warren, Luis M. Pereira and Fernando Pereira, Prolog - the language and its implementation compared with Lisp. ACM SIGART Bulletin archive, Issue 64. Proceedings of the 1977 symposium on Artificial intelligence and programming languages, pp 109 - 115.
  • Buss, Samuel R., "On Herbrand's Theorem", in Maurice, Daniel; Leivant, Raphaël, Logic and Computational Complexity, Lecture Notes in Computer Science, Springer-Verlag, pp. 195–209. 1995.
  • Buss, Samuel R., "On Herbrand's Theorem", in Maurice, Daniel; Leivant, Raphaël, Logic and Computational Complexity, Lecture Notes in Computer Science, Springer-Verlag, pp. 195–209. 1995.
  • 古川康一:第五世代コンピュータからスキルサイエンスへ - 論理プログラミング・アプローチ,特別講演資料, 2014.

関連項目