2016-11-29 4 views
0

を複製します。私はfindSiblings関数がXの兄弟の名前を返すようにしたいと思います。ただし、両方の親に一致するので、名前は2回印刷されます。私はsibling関数を変更することはできません。それは、唯一の関係がparent(joe,bob)であるファミリーツリーに依存するからです。どのように私はこの問題を解決することができます上の任意のアイデア?Prologの関数が戻ると、私はプロローグを学ぶためにしようとしていると私は私は2つの機能を持って問題に取り組んでいます

明確にするために、ダニエルとマークは兄弟です。指定されたコードについては

findSiblings(daniel,L). 

戻り

Mark; 
Mark 
+2

あなたは[mcve]を提供する必要があります。私たちはあなたのコードを実行して、あなたが得ている結果を見ることができるはずです。 – Enigmativity

答えて

0

、以下は(X \= Yに注意してください)に役立つことがあります。

parent(john, daniel). 
parent(john, mark). 

findSiblings(X,L) :- sibling(X,L). 
sibling(X,Y) :- parent(Z,X), parent(Z,Y). 

findSiblings2(X,L) :- sibling2(X,L). 
sibling2(X,Y) :- parent(Z,X), parent(Z,Y), X \= Y. 

(オンラインIDEでそれを試してみてください。http://swish.swi-prolog.org/p/Siblings.pl

関連する問題