我正在学习Prolog的基础知识,并且想知道为什么以下行打印X = 1
而不是true
?
?- X=1,1=X.
X = 1.
-
我命令中的第一个X=1
是一个赋值,第二个是相等性检查。
答案 0 :(得分:3)
查询中没有赋值或相等性测试,只有词的统一。该查询通过将变量X
与1
统一而成功,这就是顶层报告的内容:它告诉哪些变量绑定使查询为真。
在并列中的第一个目标X = 1
成功之后,第二个目标是统一的1 = 1
,这一次成功了。
P.S。还要注意,Prolog系统报告成功查询的方式有所不同。一些打印true
,另一些打印yes
(报告成功查询的传统方式)。
答案 1 :(得分:2)
当答案为 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 的另一种统一形式,但是由于 X 这次已绑定为1,因此确实是一个不同的统一。
要在Prolog中进行相等性检查,请使用==
,例如
?- 1 == 1.
true.
?- 1 == 2.
false.
逻辑上也是,
,所以
?- 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.
请注意,前三个答案有2个结果,但后两个答案有1个结果。