为什么 `X=1,X=1.` 打印 `X=1` 而不是 `true`

Why `X=1,X=1.` prints `X=1` instead of `true`

我正在学习 Prolog 的基础知识,我想知道为什么以下行打印 X = 1 而不是 true

?- X=1,1=X.
X = 1.

--

我命令中的第一个 X=1 是赋值,第二个是检查是否相等。

您的查询中没有赋值或相等性测试,只有统一项。查询通过将变量 X1 统一起来而成功,这就是顶级报告的内容:它告诉哪些变量绑定使查询为真。

在合并中的第一个目标 X = 1 成功后,第二个目标是统一 1 = 1,这微不足道地成功了。

P.S。另请注意,Prolog 系统在报告成功查询的方式上有所不同。一些打印 true,其他打印 yes(报告成功查询的传统方式)。

当答案为 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.

The first X=1 in my command is an assignment, and the second one will be a check of equality.

X=1 不是赋值,它是整数 1 到变量 X 的统一。第二个 X=1 不是相等性检查,它是 X 到 1 的另一个统一,但是由于 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.

注意前 3 个答案有 2 个结果,但最后两个答案有 1 个结果。