Prolog GnupLog只返回查询的一个值

Prolog GnupLog只返回查询的一个值,prolog,Prolog,当我输入“parent(john,X)”,我得到X=dana,但不是X=david。然而,在我之前的一次谈话中,回应我的人似乎得到了双亲的支持。这是gprolog的限制还是我仍然在做错事?要获得所有结果,必须按分号键,每个解决方案一次 如果您想以列表的形式获得所有结果,可以尝试 % facts mother(john, dana). father(john, david). mother(chelsea, dana). father(chelsea, david). mother(jared,

当我输入“parent(john,X)”,我得到X=dana,但不是X=david。然而,在我之前的一次谈话中,回应我的人似乎得到了双亲的支持。这是gprolog的限制还是我仍然在做错事?

要获得所有结果,必须按分号键
,每个解决方案一次

如果您想以列表的形式获得所有结果,可以尝试

% 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).

在交互式顶级查询应答循环中 下一个解决方案是键入分号“;”

您的示例在GNU Prolog中运行良好:

?- findall(X, parent(john, X), L).

L = [david,dana]

再见

谢谢gusbro。我没听清分号。是否存在使我的关联自动报告所有值的方法;是一种典型的prolog约定,用于顶层(您执行查询的地方)。如果您想打印所有的解决方案,您可以编写一个简单的过程,绑定结果,打印结果,然后无法获得下一个解决方案。谢谢gusbro。你能推荐一个好的资源来做这件事吗?我在查找prolog online的资源时遇到很多问题。您可以使用内置的forall/2谓词:
forall(parent(john,X)、(write(X),nl))。
。还可以在此网站上搜索prolog参考书。这里有一些问题可以解决这些问题。它是否首先返回X=dana?真奇怪。顺便说一句,您应该在gnu序言中得到这样的警告:“警告:不连续谓词母/2-忽略子句”;这是因为mother/2(和father/2)的子句没有组合在一起,所以gnu prolog忽略了它们(至少vs1.3)thanos,我如何解决这个问题-编辑-我需要把所有的母亲写在一行,然后把所有的父亲写在一行吗?是的,把谓词的每个子句都写在另一个(母亲(约翰,达纳)。母亲(切尔西,达纳)。等等)下面。
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