2013-04-26 44 views
1
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),其中所有被包括的人都被覆盖了,节省了你一些时间) 我的意思是: - 兄弟姐妹(edward,david)。真正。 对不起,如果我没有任何意义,但如果有人会告诉我我在做什么错在这里,我真的很感激它...我的事实错误? (Prolog)

父/ 2是一个直接谓词(通过直接我的意思是它不是'用其他谓词来定义),我的问题是,如果我将其更改为父(X,Y),我会得到一个单例错误

+0

如果没有用其他谓词来定义它,那就意味着它是根据事实来定义的。那么不需要添加任何事实。形式“父母(A,B)”的事实必须存在于某个地方。 – 2013-04-26 18:56:39

回答

3

代码中的第一行(parent(_,_).)将始终成功。

因此,使用descendant/s的程序sibling/s使用parent/s也将总是成功至少一次。

您应该删除该条款(parent(_,_).),因为它似乎指出任何两个人都是父母。

+0

事情是我的任务需要我包含父/ 2作为一个直接变量,如果我将其更改为父(X,Y)我得到一个单身变量错误 – 2013-04-26 14:15:38

+0

@EdwardBamber您先前的评论没有意义。谓词不是一个变量,我不知道“直接”变量应该是什么。澄清你的问题,甚至更好,编辑它以包括最初的要求(不是由你重新措词)。 – 2013-04-26 15:43:23

+0

对不起,我还是新的prolog(和声明范式一般) 我现在将安排这个 – 2013-04-26 15:46:25