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)。真正。 对不起,如果我没有意义,但是如果有人会告诉我我在这里做错了什么我真的很感激...
parent / 2是一个直接谓词(直接我的意思是它没有用其他谓词来定义)而我的问题是,如果我将它改为父(X,Y)我会得到一个单身错误
答案 0 :(得分:3)
代码中的第一行(parent(_,_).
)将始终成功。
因此,使用sibling/s
使用descendant/s
的程序parent/s
也将至少成功一次。
您应该删除该条款(parent(_,_).
),因为它似乎表明任何两个人都是父母。