为什么我会获得如此多的真实结果,而不只是一个?以下是我定义规则的方法:
parent(X,Y):- or(father(X,Y), mother(X,Y)).
sister(X,Y):- female(X), parent(P, X), parent(P,Y).
aunt(X,Y):- female(X), sister(X,P), parent(P,Y).
?- aunt(molly, johnny).
true ;
true ;
true ;
true ;
true ;
true ;
true ;
true ;
true ;
true.
答案 0 :(得分:2)
正如@Steven在评论中提到的,结果取决于你拥有的谓词,尤其是原子谓词。例如,以下代码将导致两个" true"结果因为parent(X,Y):- father(X,Y);mother(X,Y).
将匹配父亲和母亲的谓词为莫莉&亚历克斯。
father(dan,molly).
father(dan,alex).
father(alex,johnny).
mother(jess,molly).
mother(jess,alex).
female(molly).
parent(X,Y):- father(X,Y) ; mother(X,Y).
sister(X,Y):- female(X), parent(P, X), parent(P,Y), X \= Y.
aunt(X,Y):- sister(X,P), parent(P,Y).
?- aunt(molly, johnny).
true ;
true .
如果您需要获得单个匹配(例如单个true
结果),则可以在阿姨谓词末尾使用剪切!
谓词,例如aunt(X,Y):- female(X), sister(X,P), parent(P,Y),!.
在这种情况下,代码如下:
father(dan,molly).
father(dan,alex).
father(alex,johnny).
mother(jess,molly).
mother(jess,alex).
female(molly).
parent(X,Y):- father(X,Y) ; mother(X,Y).
sister(X,Y):- female(X), parent(P, X), parent(P,Y), X \= Y.
aunt(X,Y):- sister(X,P), parent(P,Y),!.
?- aunt(molly, johnny).
true .