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

尝试在 X 后统一 Ydif/2 失败:

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

仍然可以将 X 精炼为 1:

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

X 精炼为 1 并将 Y 精炼为 2 当然是可能的:

?- dif(X,X=1,Y=2.
X = 1,Y = 2.

不可能将两者都精炼为 1:

?- dif(X,Y=1.
false.