问题描述
当我浏览互联网以查找有关 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).
尝试在 X
后统一 Y
和 dif/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.