Prolog何时提示';是';它什么时候说';正确';

Prolog何时提示';是';它什么时候说';正确';,prolog,prolog-toplevel,gnu-prolog,Prolog,Prolog Toplevel,Gnu Prolog,我用Prolog编写了以下知识库: likes(yamini,chocolate). likes(anuj,apple). likes(yamini,book). likes(john,book). likes(john,france). 现在,当我查阅上述文件并尝试以下命令时: | ?- likes(anuj,apple). (1 ms) yes | ?- likes(yamini,chocolate). true ? ; no 我想了解Prolog何时回复“是”与何时回

我用Prolog编写了以下知识库:

likes(yamini,chocolate).
likes(anuj,apple).
likes(yamini,book).
likes(john,book).
likes(john,france).
现在,当我查阅上述文件并尝试以下命令时:

| ?- likes(anuj,apple).      

(1 ms) yes
| ?- likes(yamini,chocolate).

true ? ;

no

我想了解Prolog何时回复“是”与何时回复“真”。

这是顶级(Prolog命令行)实现的产物。显然,当它可以证明是一个目标,并且不确定是否有更多的解决方案时,您的实现会说
true
。如果确定只有一种解决方案,它会说

以下是SWI Prolog的功能:

?- likes(anuj,apple). 
true.
Prolog可以成功地证明目标
likes(anuj,apple)
,而且它也确信没有其他方法可以证明它,否则人们会看到类似的情况:

?- member(X,[1,2]).
X = 1 ; 
X = 2.
其中,实现目标的
X
被发现为
1
,但可能存在其他解决方案。确实有,即
2

回到我们的例子:

?- likes(yamini,chocolate).
true.

该输出取决于您使用的顶级。似乎您正在使用GProlog。当查询成功并且没有选择点(没有其他可能的解决方案)时,它将输出
yes


当查询成功时,它将回答
true
,但仍有其他可能的解决方案需要检查。

这是GNU序言吗?顺便说一句,“目标”在70年代应该被称为“猜想”,不是吗?我们想把这个猜想变成一个定理……也许实现者认为
是吗?
似乎有争议。:)但是
喜欢(亚米尼,巧克力)。
只有一个答案。。。我的意思是,
chocolate
不是一个变量,那么为什么prolog会认为可能有其他解决方案…?@yaminigore:我相信GProlog使用了第一个参数索引,所以在证明第一个子句时,它只会“检查”是否存在任何剩余的第一个参数为
yamini
的子句(第三个子句),因此,它留下了一个选择点。如果你查询
likes(yamini,book)
它会回答
yes
,因为当它证明第三个子句时,没有第一个参数为
yamini
的剩余子句。