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