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).

这里的问题是由于某种原因代码不起作用。我的意思是,无论我输入什么关于这段代码的查询,它总是返回真(我没有在我的程序中包括所有原子,因为它只是一个简单的男性(X)或女性(X),其中所有被包括在内的人被包括在内,为您节省一些时间)我的意思的一个例子:?-兄弟(爱德华,大卫)。真的。对不起,如果我没有任何意义,但如果有人能告诉我我在这里做错了什么,我将非常感激......

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

4

1 回答 1

3

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

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

您应该删除该子句 ( parent(_,_).),因为它似乎表明任何两个人都是父母。

于 2013-04-26T14:06:48.120 回答