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
为什么我会看到这种行为?
答案 0 :(得分:1)
假设sister(X,Y)
说Y
是X
的姐妹,则需要woman(Y)
,而不是woman(X)
。
重新安排规则使其有效(demo):
sister(X, Y):-
woman(Y),
parents(X, P, M),
parents(Y, P, M),
X \= Y.
重新安排的重要一点是X \= Y
术语在X
和Y
绑定之后移动到某个点 - { {1}}作为输入提供给规则,X
通过参与Y
绑定。
答案 1 :(得分:1)
保持纯洁!怎么样?使用prolog-dif来表达术语不平等!
sister(X, Y) :- dif(X, Y), woman(X), parents(X, P, M), parents(Y, P, M).
示例查询:
?- sister(lisa, X).
X = maggie.
有关dif/2
的详情,请参阅: