2
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

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

4

2 回答 2

1

保持纯洁!如何?使用来表达术语不等式!

姐妹(X,Y):-
   差异(X,Y),
   女人(X),
   父母(X,P,M),
   父母(Y,P,M)。

示例查询:

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

有关更多信息,dif/2另请参阅:

于 2015-12-21T18:39:31.047 回答
1

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

重新安排规则使其工作(演示):

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

这种重新安排中的重要一点是,该X \= Y术语被移动到两者之后的一个点X并且Y已经被绑定-X被作为输入提供给规则,并Y通过参与来绑定woman(Y)

于 2015-12-21T17:09:21.007 回答