Prolog 什么时候提示 'yes' 什么时候提示 'true'

When does Prolog prompts 'yes' and when does it says 'true'

我在 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 何时回复 'yes' 以及何时回复 'true'。

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

这是 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,但仍有其他可能的解决方案需要检查。