Prologという言語を試してみる

Qiには、標準ライブラリとしてPrologインタプリタが搭載されているらしいので、
Prologについて、調べながら少しずつやってみました。

Prologってどんな言語?

Prologは、「論理型言語」と呼ばれる言語で、「事実を元に質問の答えを出す」ということをするようです。
この言語は、かなり歴史が長いようです。

とりあえずやってみる

まずは、事実を定義します。
Qiでは、「m-prolog」という関数を使って事実を定義します。

(m-prolog "prologのコード")

のように使います。
今回は、

mother(tamako, nobita).
father(nobisuke, nobita).
parent(P, C) :- mother(P, C).
parent(P, C) :- father(P, C).

というコードを使います。
「tamakoはnobitaの母で、nobisukeはnobitaの父である」ということと、「親は父か母である」ということを定義しています。
「mother(tamako, nobita).」のようにすると、「tamakoはnobitaとmotherの関係にある」ということを定義できます。
そして、「parent(P, C) :- mother(P, C).」のところで、「PがCとmotherの関係であるなら、PはCとparentの関係にある」ということを定義します。
「P」や「C」など、大文字だけの言葉や、大文字で始まる言葉は変数で、これは「何か」を表して、関数の引数のような感じで使ったり、質問するときに使ったりします。

(m-prolog "
mother(tamako, nobita).
father(nobisuke, nobita).
parent(P, C) :- mother(P, C).
parent(P, C) :- father(P, C).")

このようにして、定義をPrologインタプリタに読み込ませます。
そして、「prolog?」という関数で質問します。

(prolog? (parent tamako nobita))

このようにして、Prologインタプリタに質問します。
「tamakoはnobitaとparentの関係か?」という意味です。
この場合、trueが返ります。「そうです」ということです。

(prolog? (parent tamako nobisuke))

と質問すると、falseが返ります。「違います」ということです。


この言語についてはよくわからないので、もう少し調べたいと思っています。