parent(_,_).
descendant(X,Y):- parent(Y,X).
descendant(edward,david).
descendant(malcolm,mark).
descendant(edward,therese).
descendant(malcolm,nathalie).
descendant(matthew,raymond).
descendant(matthew,nadine).
sibling(X,Y):- descendant(X,Z), descendant(Y,Z).
sibling(edward,kevin).
sibling(sean,vicky).
sibling(vicky,edward).
sibling(malcolm,claude).
sibling(matthew,stephania).
sibling(matthew,kurt).
ここでの問題は、何らかの理由でコードが機能しないことです。つまり、このコードに関して入力したクエリに関係なく、常に true が返されるということです (プログラムにすべてのアトムを含めているわけではありません。これは単純な男性 (X) または女性 (X) であり、すべてが含まれている人々の一部がカバーされているため、時間を節約できます) 私が言いたいことの例: ?- 兄弟(エドワード、デビッド)。真実。私が意味をなしていない場合は申し訳ありませんが、誰かが私がここで間違っていることを教えてくれたら、本当に感謝します...
parent/2 は直接述語であり (直接とは、他の述語に関して定義されていないことを意味します)、それに関する私の問題は、それを parent(X,Y) に変更すると、シングルトン エラーが発生することです。