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):“确保 XY 不会沿着这条路统一”,它设置了一个涉及的约束它的论点否决(并失败)任何使 XY 相同的尝试。

此后,XY将不再统一。打印残差约束:

?- dif(X,Y).
dif(X,Y).

dif/2 失败后尝试统一 XY

?- 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.