In place of not(X = Y)
you need to write + X = Y
or X = Y
. But consider to use dif(X,Y)
instead. dif/2
is present in B, SWI, YAP, SICStus. To see the difference:
?- X = b, dif(a, X).
X = b.
?- X = b, + a = X.
X = b.
So up to now everything seems to be fine. But what, if we simply
exchange the order of the two goals?
?- + a = X, X = b.
false.
?- dif(a, X), X = b.
X = b.
(+)/1
now gives us a different result, because there is an answer
for a = X
, the goal + a = X
will fail.
(+)/1
is thus not negation, but means not provable at this point
in time.
A safe approximation of dif/2
is possible in ISO Prolog, too.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…