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

时间:2015-12-21 16:49:24

标签: 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

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

2 个答案:

答案 0 :(得分:1)

假设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术语在XY 绑定之后移动到某个点 - { {1}}作为输入提供给规则,X通过参与Y绑定。

答案 1 :(得分:1)

保持纯洁!怎么样?使用来表达术语不平等!

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

示例查询:

?- sister(lisa, X).
X = maggie.

有关dif/2的详情,请参阅: