Swi-Prolog 中的 \= 是什么
What is \= in Swi-Prolog
当我浏览互联网查找有关 Swi-prolog 的信息时,我碰巧找到了 \= ,给定的示例如 X \= Y。有人可以告诉我它是什么吗?是某种算术运算吗?
这是 Prolog 中的基本运算符,并非特定于 SWI-Prolog。
这意味着左侧术语和右侧术语不统一(现在以及因此在搜索路径下的任何未来实例中树),所以这是一个关于这些术语结构的问题。你也可以写 \+ (LHS = RHS)
而不是 LHS \= RHS
.
这些不统一:
?- a \= b.
true.
?- f(X) \= g(Y).
true.
但是这些确实如此,所以答案是 false
:
?- f(X) \= f(Y).
false.
右边实例化,还是统一:
?- f(X) \= f(a).
false.
在左边实例化,统一现在是不可能的:
?- f(b) \= f(a).
true.
使用 dif/2
可能会很有趣(dif(X,Y)
:“确保 X
和 Y
不会沿着这条路统一”,它设置了一个涉及的约束它的论点否决(并失败)任何使 X
和 Y
相同的尝试。
此后,X
和Y
将不再统一。打印残差约束:
?- dif(X,Y).
dif(X,Y).
在 dif/2
失败后尝试统一 X
和 Y
:
?- dif(X,Y),X=Y.
false.
将X
精炼到1仍有可能:
?- dif(X,Y),X=1.
X = 1,
dif(1,Y).
将X
精炼为1,将Y
精炼为2当然是可以的:
?- dif(X,Y),X=1,Y=2.
X = 1,
Y = 2.
无法将两者都精炼为 1:
?- dif(X,Y),X=1,Y=1.
false.
当我浏览互联网查找有关 Swi-prolog 的信息时,我碰巧找到了 \= ,给定的示例如 X \= Y。有人可以告诉我它是什么吗?是某种算术运算吗?
这是 Prolog 中的基本运算符,并非特定于 SWI-Prolog。
这意味着左侧术语和右侧术语不统一(现在以及因此在搜索路径下的任何未来实例中树),所以这是一个关于这些术语结构的问题。你也可以写 \+ (LHS = RHS)
而不是 LHS \= RHS
.
这些不统一:
?- a \= b.
true.
?- f(X) \= g(Y).
true.
但是这些确实如此,所以答案是 false
:
?- f(X) \= f(Y).
false.
右边实例化,还是统一:
?- f(X) \= f(a).
false.
在左边实例化,统一现在是不可能的:
?- f(b) \= f(a).
true.
使用 dif/2
可能会很有趣(dif(X,Y)
:“确保 X
和 Y
不会沿着这条路统一”,它设置了一个涉及的约束它的论点否决(并失败)任何使 X
和 Y
相同的尝试。
此后,X
和Y
将不再统一。打印残差约束:
?- dif(X,Y).
dif(X,Y).
在 dif/2
失败后尝试统一 X
和 Y
:
?- dif(X,Y),X=Y.
false.
将X
精炼到1仍有可能:
?- dif(X,Y),X=1.
X = 1,
dif(1,Y).
将X
精炼为1,将Y
精炼为2当然是可以的:
?- dif(X,Y),X=1,Y=2.
X = 1,
Y = 2.
无法将两者都精炼为 1:
?- dif(X,Y),X=1,Y=1.
false.