Prolog中"false"和"no"之间的区别是什么?

Enr*_*ani 5 prolog swi-prolog prolog-toplevel

我开始学习Prolog之后的Prolog 编程:使用ISO标准.在介绍到,他们所作的断言语言的7页:"在序言答案没有被用来指没有与问题相结合,以记住,这是非常重要的.没有是不一样的错误." 那么为什么SWI-Prolog使用falsetrue语句代替yesno

fal*_*lse 8

首先,ISO标准(ISO/IEC 13211-1:1995)没有定义顶层循环.在1范围内,它写道:

注 - ISO/IEC 13211的本部分未规定:

...

f)
Prolog处理器的用户环境(顶级循环,调试器,库系统,编辑器,编译器等).

传统上,查询的答案已回答是或否.如果是,则显示答案替换(如果存在).

今天,随着答案中出现越来越多的约束,传统的顶级循环变得有点麻烦.什么是正确的答案 ?- dif(X,a).?它不可能是肯定的,它可能是一种可能,它首先由Jaffar等人使用,CLP(R).但很多时候,人们想要重复使用答案.

?- dif(X,a).
dif(X,a).

?- dif(b,a).
true.

?- true.
true.
Run Code Online (Sandbox Code Playgroud)

SWI中的想法是将文本作为答案生成,以便您可以将其粘贴回来以获得完全相同的结果.以这种方式,答案的语法在某种程度上被指定 - 它必须是有效的Prolog文本.

所以,如果不再是,为什么不存在呢?出于这个原因,SWI给出false.了答案.在SWI之前,Prolog IV确实做出了回应false.请注意,例如SWI中的以下修复点:

?- true; false.
true ;
false.
Run Code Online (Sandbox Code Playgroud)

所以即使是这个微小的细节仍保留在答案中.然而在Prolog IV中,true由于Prolog IV一下子显示了所有答案,因此它已经崩溃了.

?- true ; false.

true.
Run Code Online (Sandbox Code Playgroud)

有关答案的更多信息,请参阅此处.

  • 这个答案很好,直到我查看你的用户名,然后它变得惊人. (7认同)
  • 这是一个误解.`true/0`和`false/0`是内置谓词.通过显示你'true/0` Prolog说:你的查询的答案与'true` /`false`的答案完全相同.C&M想要强调的是,程序中的事实是对现实的不完整描述. (2认同)