Prolog 为什么'X=1,X=1.'打印'X=1'而不是'true'`
我正在学习Prolog的基础知识,我想知道为什么下面这行打印的是Prolog 为什么'X=1,X=1.'打印'X=1'而不是'true'`,prolog,prolog-toplevel,Prolog,Prolog Toplevel,我正在学习Prolog的基础知识,我想知道为什么下面这行打印的是X=1,而不是true ?- X=1,1=X. X = 1. -- 我的命令中的第一个X=1是赋值,第二个是相等性检查。查询中没有赋值或相等性测试,只有术语的统一。查询通过将变量X与1统一而成功,这就是顶层报告的内容:它告诉哪些变量绑定使查询成为真 在连接中的第一个目标,X=1成功后,第二个目标是统一1=1,这一目标非常成功 另请注意,Prolog系统报告成功查询的方式不同。一些打印true,另一些打印yes(报告成功查询的传统方
X=1
,而不是true
?- X=1,1=X.
X = 1.
--
我的命令中的第一个
X=1
是赋值,第二个是相等性检查。查询中没有赋值或相等性测试,只有术语的统一。查询通过将变量X
与1
统一而成功,这就是顶层报告的内容:它告诉哪些变量绑定使查询成为真
在连接中的第一个目标,X=1
成功后,第二个目标是统一1=1
,这一目标非常成功
另请注意,Prolog系统报告成功查询的方式不同。一些打印true
,另一些打印yes
(报告成功查询的传统方式)。当答案为true且值绑定到顶层变量时,将显示变量的值,这意味着结果为true
这里有一些例子
test_01 :-
X = 1,
X = 1.
test_02 :-
X = 1,
X = 2.
test_03(X) :-
X = 1,
X = 1.
test_04(X) :-
X = 1,
X = 2.
当使用SWI Prolog从顶层运行示例时
?- test_01.
true.
?- test_02.
false.
?- test_03(X).
X = 1.
?- test_04(X).
false.
下面是一些仅在顶层完成的示例
?- X=1.
X = 1.
?- 1=1.
true.
?- 1=0.
false.
?- 1==0.
false.
我命令中的第一个X=1是赋值,第二个是相等性检查
X=1
不是赋值,它是整数1与变量X的统一。第二个X=1
不是对等式的检查,它是X与1的另一个统一,但由于此时X被绑定到1,它实际上是一个不同的统一
要在Prolog中执行相等性检查,请使用==
,例如
?- 1 == 1.
true.
?- 1 == 2.
false.
另外,,
是逻辑and,因此如果
?- X = 1.
X = 1.
然后1与X绑定,并且为真,并且与问题中的第二行类似
然而,代码也必须被视为
?- true,true.
true.
相对于
?- true,false.
false.
而代码>是逻辑或
?- true;true.
true ;
true.
?- true;false.
true ;
false.
?- true;false;true.
true ;
true.
?- false;true.
true.
?- false;false.
false.
请注意,前三个答案有两个结果,但后两个答案有一个结果。谢谢。我有点困惑。我从你那里了解到1=1。
也是一个统一体。那么为什么1=1.
打印true
,而X=1,1=X.
打印X=1
?统一成功,无需绑定任何变量。因此,在这种情况下,顶级解释器只需打印true
(或yes
,具体取决于使用的Prolog系统)。非常简单,Prolog顶级解释器(也称为REPLs)就是这么做的。它们收集查询中的所有自由变量,并在每次成功时显示它们的值。这可能是一个任意的选择。某些实现可以选择不显示任何内容,除非在查询中明确请求。有些不显示以下划线开头的变量的值,如\ux
。可能所有的变量都不会显示任何(即匿名变量)的值。欢迎来到序言!:)谢谢,你能解释一下为什么注意前三个答案有两个结果,而后两个答案有一个结果。
?如果你运行更多这样的示例,你会发现除非是最后一个结果,否则不会返回假结果。