GNUProlog仅返回查询的一个值

时间:2011-12-06 17:53:21

标签: prolog

% 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的限制还是我还在做错什么?

2 个答案:

答案 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

再见