Prolog何时提示';是';它什么时候说';正确';
我用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何时回复“是”与何时回
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
的剩余子句。