旧応用プログラミング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)の形で、入力と出力を利用する。