Prolog如何跳过一个事实

时间:2018-05-25 14:50:46

标签: prolog backtracking

标题说我怎么能做到这一点? 我有这个知识库

person(alice).
person(mark).
person(sally).

likes(alice,coke).
likes(alice,fanta).
likes(alice,sprite).
likes(mark,water).
likes(mark,coffee).
likes(sally,pepsi).

而且我想输出爱丽丝喜欢的每一种不是芬达的饮料。有人可以解释如何实现它以及它为什么这样做?

1 个答案:

答案 0 :(得分:1)

如果您输入查询likes(alice, X),您将获得所有喜欢的饮料,包括芬达:

?- likes(alice, X).
X = coke ;
X = fanta ;
X = sprite.

如果您将目标X \= fanta与此相关联(注意:必须在之后),那么当X绑定到fanta时,它将无法实现目标{{1} },它将回溯以寻找其他选择:

X \= fanta

(注意:按?- likes(alice, X), X \= fanta. X = coke ; X = sprite. 进行下一个选择)

建议阅读:Proof search