为什么 `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
是赋值,第二个是检查是否相等。
您的查询中没有赋值或相等性测试,只有统一项。查询通过将变量 X
与 1
统一起来而成功,这就是顶级报告的内容:它告诉哪些变量绑定使查询为真。
在合并中的第一个目标 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 个结果。
我正在学习 Prolog 的基础知识,我想知道为什么以下行打印 X = 1
而不是 true
?
?- X=1,1=X.
X = 1.
--
我命令中的第一个 X=1
是赋值,第二个是检查是否相等。
您的查询中没有赋值或相等性测试,只有统一项。查询通过将变量 X
与 1
统一起来而成功,这就是顶级报告的内容:它告诉哪些变量绑定使查询为真。
在合并中的第一个目标 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 个结果。