Prolog
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Prolog(プロローグ、プロログ)は非手続き型プログラミング言語の一つ。論理型言語に分類される。名称はProgramming in Logic の略。 1972年ごろにフランスのカルメラウアーとコワルスキーによって考案された。プログラムは一階述語論理に基づいてデータ間の関係を示す命題として記述され、処理系がそれらにパターンマッチング(ユニフィケーション)を施しながら、与えられた命題が成立するか再帰的手続きによって探索する。 人工知能におけるトップ・ダウン式の問題解決と相性が良いために、人工知能研究とエキスパートシステムの実現のための主要言語として広く採用された。
Prologのもととなる演繹手法は導出と呼ばれ、自動定理証明の研究においてProlog開発以前よりよく知られていた。Prologは、導出において節を以下に述べる頭部が一つの命題からのみなるホーン節に限定したものととらえる事が出来る。
目次 |
[編集] 基本的な言語仕様
プログラムは、ホーン節、もしくは単に節と呼ばれる形式の項を並べたもの。節は、頭部と本体部からなり、
頭部.
または
頭部 :- 本体部.
これは、それぞれ「AはBである」、「BならばCである」という命題の形式に対応する。Prologの処理系は、人間が入力した命題と一致する節があるか調べ、あった場合はその本体部に記述されている命題と一致する節があるか再帰的に調べる。
例として「ソクラテスは人間である」「人間は死ぬ」をPrologで記述すると以下のようになる。ここでXは変数である。
人間(ソクラテス). 死ぬ(X) :- 人間(X).
システムに対して以下のように入力すると、trueが返される。
?- 死ぬ(ソクラテス).
これは「ソクラテスは死ぬか」と質問したことに対して、システムが内部で推論を行なって、既知の知識から答えを出したものである。
以下のように入力すると、「死ぬのは誰か」と質問したことと同じになる。この場合もシステムが内部で推論を行なって、死ぬ(X)を満たすXを表示する。
?- 死ぬ(X). x=ソクラテス
一般の手続き型言語と異なり、Prologは複数の計算結果がありうる。先のプログラム例を拡張して
人間(ソクラテス). 人間(アリストテレス). 死ぬ(X) :- 人間(X).
とした場合、死ぬ(X)を満たすXは複数(ソクラテスとアリストテレス)がありうる。多くのProlog 処理系ではこのような複数解が存在する時に新たな解を得る場合は
?- 死ぬ(X). x=ソクラテス ; X=アリストテレス
と";"(セミコロン)記号を用いて他の解を得る。このような非決定性がコンピュータ言語としてのPrologの特徴の一つである。
時間の概念がない場合、論理演算は集合演算とほぼ等価であるので、括弧でグループ分けをするLISPとできることは同じである。つまり「おおもとの知識データがすべて0と1にはっきり切り分けらていれば」「その知識がカバーする範囲については」「知識データに述べられていないことはすべて嘘(偽)であると仮定すれば」論理演算の答えを出してくれる。逆に言えば、実世界のように無限にひろがり、未知のものが多々あり、クリアな分類が難しい世界(→フレーム問題)の役にはたたない。
第五世代コンピュータ(→人工知能)のプログラミング言語として、Prologを基にして、非決定性を取り去り、並列演算処理を追加したKL/1が使われた。
[編集] 処理系
- MINERVA - 有料、業務用、ISO標準、Javaベース
- GNU Prolog - GNUによる Prolog のフリーな処理系、ISO準拠
- SWI-Prolog - ISO準拠のフリーな Prolog 処理系、多くのOSをサポートしている。
- Open Prolog - Mac OS用のISO準拠のフリーなProlog処理系
- K-Prolog - ISO準拠で日本語に対応した国産の処理系 有料
[編集] 国際会議
- INAP International Conference on Declarative Programming and Knowledge Management
[編集] 関連項目
カテゴリ: コンピュータ関連のスタブ項目 | プログラミング言語 | 論理学