Prolog函数返回重复的

Prolog函数返回重复的,prolog,Prolog,我正在努力学习prolog,我正在解决一个问题,我有两个函数: findSiblings(X,L):-sibling(X,L). sibling(X,Y):-parent(Z,X),parent(Z,Y). 其中X和Y是名称,L是返回值。我想让findSiblings函数返回X的兄弟姐妹的名字,它确实返回了。然而,名字会被打印两次,因为它匹配父母双方。我无法更改兄弟姐妹函数,因为它依赖于一个家族树,其中唯一的关系是父(乔,鲍勃)。有没有办法解决这个问题 为了澄清,假设丹尼尔和马克是兄弟 fi

我正在努力学习prolog,我正在解决一个问题,我有两个函数:

findSiblings(X,L):-sibling(X,L). 
sibling(X,Y):-parent(Z,X),parent(Z,Y).
其中X和Y是名称,L是返回值。我想让
findSiblings
函数返回X的兄弟姐妹的名字,它确实返回了。然而,名字会被打印两次,因为它匹配父母双方。我无法更改
兄弟姐妹
函数,因为它依赖于一个家族树,其中唯一的关系是
父(乔,鲍勃)
。有没有办法解决这个问题

为了澄清,假设丹尼尔和马克是兄弟

findSiblings(daniel,L).
返回

Mark;
Mark

对于给定的代码,以下内容可能会有所帮助(注意
X\=Y
):


(在在线IDE中尝试:)

对于给定的代码,以下内容可能会有所帮助(注意
X\=Y
):


(在在线IDE中试用:)

如果mark有父亲和母亲作为父母,它可以复制mark的原因

这会造成重复呼叫,例如

parent(john,daniel) -> parent(john,mark)
然后

parent(mary,daniel) -> parent(mary,mark)

如果马克有父亲和母亲作为父母,它可能复制马克的原因

这会造成重复呼叫,例如

parent(john,daniel) -> parent(john,mark)
然后

parent(mary,daniel) -> parent(mary,mark)
你应该提供一份报告。我们应该能够运行您的代码并查看您得到的结果。您应该提供一个。我们应该能够运行您的代码并查看您得到的结果。