誰かの兄弟かどうかを判断するルールをプロローグプログラムに書き込もうとしています。Prologプログラムの存在の例外
たとえば、brother_of(chris、X)と入力すると、クリスは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.
それはうまくいきました、ありがとう!しかし、今私はbrother_of(chris、X)に尋ねると、クリスティを2回返します。クリスティーが返された後、私は ";"とタイプします。これ以上存在しないことを確認するためには、それは存在してはならないので、「いいえ」を返すべきですが、再びクリスティーを返します。理由は何ですか? – aclark
あなたは[cut](http://en.wikipedia.org/wiki/Cut_%28logic_programming%29)の目標: '!'が必要です。あなたがそれを使用する方法についての助けが必要かどうか私に尋ねてください(あなたがそれをあなたの研究でそれを見たのであればわからない) – mgibsonbr
私はそれを実際に見たことがありません。どうやって使うの? – aclark