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