Prolog を使用するのはこれが初めてで、誰かが私のロジックについてアドバイスをくれるかどうか疑問に思っていました:
male(jerry).
male(stuart).
male(warren).
male(peter).
female(kather).
female(maryalice).
female(ann).
brother(jerry,stuart).
brother(jerry,kather).
brother(peter, warren).
sister(ann, maryalice).
sister(kather,jerry).
parent_of(warren,jerry).
parent_of(maryalice,jerry).
これは宿題の一部であり、上記の事実のみを使用することが許可されています. warren と mary alice が stuart と kather の親でもあることを知るには、いくつかのルールを実装する必要があります。私がやったことは次のとおりです。
parent_of(X,Y) :- brother(Z,Y), parent_of(X,Z).
parent_of(X,Y) :- brother(Y,Z), parent_of(X,Z).
parent_of(X,Y) :- sister(Z,Y), parent_of(X,Z).
parent_of(X,Y) :- sister(Y,Z), parent_of(X,Z).
上記のルールとファクトを使用して prolog で parent_of(X,Y) をクエリすると、X=warren、Y=stuart および X=maryalice、Y=stuart の再帰値を持つ無限ループに陥りました。
アドバイスをいただければ幸いです。ありがとう!