Prologという言語を試してみる
Qiには、標準ライブラリとして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が返ります。「違います」ということです。
この言語についてはよくわからないので、もう少し調べたいと思っています。