P :- Q , R.
という節を考えます。この節は
P :- Q ; R.
このように書くと、QまたはRが真ならば、Pは真である、となります。ということは、これは、
P :- Q.
P :- R.
と同じことになります。
また、カンマはセミコロンより優先順位が高いので、
P :- Q,R ; S,T,U.
は、
P :- (Q,R) ; (S,T,U).
と解釈され、
P :- Q,R.
P :- S,T,U.
と同じになります。
relative(X,Y):-
predecessor(X,Y).
relative(X,Y):-
predecessor(Y,X).
relative(X,Y):-
predecessor(Z,X),
predecessor(Z,Y).
relative(X,Y):-
predecessor(X,Z),
predecessor(Y,Z).
translate(Number,Word):-
Number = 1, Word = one;
Number = 2, Word = two;
Number = 3, Word = three.
tall(yuusuke). % 幽助は背が高い
small(genkai). % 幻海師範は背が低い
small(koenma). % コエンマは背が低い
tall(kurama). % 鞍馬は背が高い
small(hiei). % 飛影は背が低い
ningen(genkai). % 幻海は人間界の住人
reikai(koenma). % コエンマは霊界の住人
makai(kurama). % 鞍馬は魔界の住人
makai(hiei). % 飛影は魔界
not_human(Z):-reikai(Z). % 霊界の住人は人間ではない
not_human(Z):-makai(Z). % 魔界の住人は人間ではない
富樫義博作マンガ「遊幽白書」の登場人物。このプログラムをPrologインタプリタに読み込んでおいて、次のように質問します。
浦飯幽助:主人公。霊界探偵。
幻海師範:初老の女性武闘家。ゲームも強いらしい。幽助の師匠。
コエンマ:閻魔大王の息子。霊界バージョンだと2.5等身位で背が低い。幽助を霊界探偵にスカウトした。
鞍馬:もともとは魔界の盗賊頭。いまは人間南野幸一(だと思ったんだがなー。「南野」は確かだ。)と合体している。ここでは、一応「魔界の住人」ということで...
飛影:魔界でも他の世界とは隔絶された氷女を母に持つ。自分を捨てた母とその氷女の世界に対する復讐の念で生きてきたが...。
「遊幽」を知らない人にはごめんなさいね。この”霊界”、”魔界”ってシチュエーションが例題にぴったりだったもんで。
?- not_human(X),tall(X).
これは、「人間ではなくて、背が高いのは誰ですか」ということです。
?- tall(X),not_human(X).
と入力した場合の実行順序を考えなさい。
?- not_human(X),tall(X).
と本質的には同じであるが、実行順序にどのような違いがあるか、考えなさい。