Prolog に触る(1)
とりあえず like.pro として以下のようなファイルを作って、SWI-Prolog に読み込ませてみる。
like(taro, coffee). like(taro, hanako). like(hanako, hanako). like(sizuka, isamu). like(isamu, sizuka). like(coffee, human). human(taro). human(hanako). human(sizuka). human(isamu).
で、インタプリタで色々質問。
1 ?- like(taro, hanako). Yes 2 ?- like(hanako, taro). No 3 ?- human(taro). Yes
Yes/No の 1bit の返事をしてくれた喜ぼう。
4 ?- like(taro, X). X = coffee ; X = hanako ; No
こういうことですね。
< taro が like な X はなんですか。 > coffee じゃないですか? < いや違う(「;」の入力) > hanako じゃないですか? < いや違う > じゃあもう知らねえよ馬鹿
6 ?- like(X, hanako). X = taro Yes 7 ?- like(Foo, Bar). Foo = taro, Bar = coffee ; Foo = taro, Bar = hanako ; Yes 8 ?- human(X). X = taro Yes 9 ?- like(X, X). X = hanako Yes
自由変数(X, Y みたいな大文字で始まる識別子)はどこにでも指定できるよ、と。うん、これは述語論理そのまんまじゃなかろうか。あとここまでしかやったことない俺がほざくのもなんだが、Prologって簡単じゃね? 噂に聞いた評判では、むずいむずいと評判だったけど、それは Prolog でプログラム書くのが難しいのであって、Prolog が難しいわけじゃないのではないか。
まだわからんけど。
12 ?- like(X, Y), like(Y,X). X = hanako, Y = hanako ; X = sizuka, Y = isamu Yes 13 ?- like(X, Y), human(Y). X = taro, Y = hanako ; X = hanako, Y = hanako ; X = sizuka, Y = isamu ; X = isamu, Y = sizuka ; No
こんなんもできた。X, Y のような自由変数は、それ以降で束縛されてるとか。
えーと例えば上の 13 はこんな論理式に相当するだろうか。 (L:Like, H:Human という述語で)
とりあえず、論理学の講義は受けといてよかったなあと思った。