3.Prolog

旧応用プログラミング2 のページ

http://kaz.cyteen.nagoya-bunri.ac.jp/advprog2/

から Prolog入門の内容を実施する。

Prologも、前回紹介したVISCUITの様に、パターンマッチで処理が進んでいく。

ただし、Prologで使われるパターンは、絵ではなく、記号の並び、もしくは数値である。

pattern1(X) :- pattern2(X).

X が、pattern1 なら X は pattern2 である。

というルールの例。

ここで、大文字の X はPrologのパターンを表わす変数。

?- pattern1(a).

を実行すると、かっこ内の a が、上記のルールのXとパターンマッチして置き変わる。

pattern1(a) :- pattern2(a).
次に、pattern2(a) がチェックされる。
もし、pattern2 に関するルールが以下の様であれば、
pattern2(X) :- pattern3(X) , pattern4(X).
pattern3 と pattern4 の両方で a がパターンマッチするか(条件を満たすかチェック)される。
先にpattern3が試され、次にpattern4が試される。
どちらのパターンでも、マッチに失敗したら、最初の pattern1 まで戻り、pattern1が失敗したことになり、
false と表示され、パターンマッチ失敗という結果になる。
どちらのパターンでも、マッチに成功したら、結果は true と表示される。
条件でいうと、 A かつ B であるかどうかを試すルールに相当する。
次の様に、2行に分れてルールが定義された場合、
pattern2(X) :- pattern3(X).
pattern2(X) :- pattern4(X).
pattern3 で a がマッチすれば、pattern1 が成功し、true という結果になる。
pattern3 で失敗しても、 pattern4 で成功すれば、 同じく true になる。

両方のチェックに失敗したとき、pattern1 で a はマッチに失敗し、結果が false となる。

条件でいうと、 A または C であるかどうかを試すルールに相当する。

以上の様に、ルールを組み合わせて、ある種の知識データベースを記述し、データベース内の知識を利用して、
質問 → 応答(Yes か No)

の形で、入力と出力を利用する。