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)
说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
已绑定(bind) - X
被赋予规则作为输入,并且 Y
通过参与 woman(Y)
受到约束.
关于prolog - 为什么这个 prolog 程序返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400599/