私は、誰かが他の誰かの兄弟であるかどうかを決定するルールを私のプロローグプログラムに書き込もうとしています。
たとえば、brother_of(chris、X)と入力すると、chrisはchristyの兄弟であるため、christyが返されます。ただし、これを入力すると、存在例外が発生します。すべてをカバーするためにファクトを含めましたが、ルール定義に問題があるのではないでしょうか。コードは以下のとおりです。
/* Facts */
female(ella).
female(jodi).
female(sonya).
female(jane).
female(christy).
female(mary).
male(arnold).
male(chris).
male(louis).
male(mark).
father(arnold).
father(louis).
father(mark).
mother(ella).
mother(jodi).
mother(jane).
mother(mary).
father_of(arnold, chris). /* arnold is the father of chris */
father_of(arnold, christy).
father_of(louis, mark).
father_of(mark, arnold).
mother_of(mary, chris).
mother_of(mary, christy).
mother_of(jane, arnold).
mother_of(ella, sonya).
mother_of(jodi, ella).
mother_of(jodi, mark).
/* Rules */
brother_of(X, Y) :-
male(X),
((father_of(Z, X), father_of(Z, Y));
(mother_of(W, X), mother_of(W, Y))),
X =\= Y.