% facts
mother(john, dana).
father(john, david).
mother(chelsea, dana).
father(chelsea, david).
mother(jared, dana).
father(jared, david).
% queries
parent(X,Y) :- father(X,Y);mother(X,Y).
当我输入“parent(john,X)。”时,我得到X = dana,但不是X == david。然而,在我之前的question,回复我的人似乎得到了父母双方。这是gprolog的限制还是我还在做错什么?
答案 0 :(得分:5)
要获得所有结果,您必须按分号键;
,每个解决方案一次。
如果您希望将所有结果作为列表获取,可以尝试
?- findall(X, parent(john, X), L).
L = [david,dana]
答案 1 :(得分:2)
在交互式顶级查询应答循环中,您将获得 键入分号“;”的下一个解决方案。
您的示例在GNU Prolog中运行良好:
GNU Prolog 1.4.0
By Daniel Diaz
Copyright (C) 1999-2011 Daniel Diaz
| ?- [user].
compiling user for byte code...
mother(john, dana).
father(john, david).
parent(X,Y) :- father(X,Y);mother(X,Y).
user compiled, 4 lines read - 725 bytes written, 33109 ms
(2 ms) yes
| ?- parent(john,X).
X = david ? ;
X = dana
yes
再见