prolog - 为什么这个 prolog 程序返回 false?

标签 prolog prolog-dif

woman(lisa).
woman(maggie).

parents(lisa  , homer, marge).
parents(maggie, homer, marge).

sister(X, Y) :-
   X \= Y,
   woman(X),
   parents(X, P, M),
   parents(Y, P, M).

当我运行以下查询时,我并没有预料到会失败(但仍然得到了它)。

?- sister(lisa, X).
false.                         % expected result: X = maggie

为什么我会看到这种行为?

最佳答案

假设sister(X,Y)YX 的姐妹,你想要woman(Y) ,不是woman(X) .

重新排列规则使其生效 ( demo ):

sister(X, Y):-
  woman(Y),
  parents(X, P, M),
  parents(Y, P, M),
  X \= Y.

这次重新安排中最重要的是X \= Y术语移至X之后的一个点和Y绑定(bind) - X被赋予规则作为输入,并且 Y通过参与 woman(Y) 受到约束.

关于prolog - 为什么这个 prolog 程序返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400599/

相关文章:

machine-learning - 使用 WordNet 将特定单词概括为高阶概念

list - Prolog:使用递归在多个列表上成对兼容

prolog - SWI Prolog 不终止

prolog - 如何使用 diff/2 防止生成的序列中出现重复?

list - 查找列表中的重复项

prolog - 是否有任何项目是从 Prolog 原型(prototype)开始的

prolog - Prolog 规则中目标(语句)的顺序

list - 具有多个相同元素的列表的排列Prolog

prolog - 序言中的保护条款?

algorithm - 限制 Prolog 中的搜索 - Magic Square