11

Prolog 中的 A \= B 和 not(A==B) 有什么区别?

我找到了这个http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse5 和这个 wiki 页面 http://en.wikibooks.org/wiki/Prolog/Built-in_predicates 但它没有帮助我,因为没有澄清差异,也没有 \= 的简短含义。

谢谢。

4

1 回答 1

18

A \= B相当于not (A = B)

所以让我们先比较一下=/2==/2来自 swi-prolog 手册:

?Term1 = ?Term2
将 Term1 与 Term2 统一起来。如果统一成功则为真

@Term1 == @Term2
如果 Term1 等价于 Term2,则为真。

请注意,=/2尝试统一条款,如果成功,则==/2在执行检查时为真:

?- X = 1.
X = 1.
(implicit true.)

尽管

?- X == 1.
false.

并且:

?- X = Y.
X = Y.

?- X == Y.
false.

现在,not/1将反转结果并在=/2==/2为假时为真。
因为==/2没有什么复杂的;如果这些条款现在是等价的,它将返回 false,否则返回 true。
因为=/2你应该记住,所有的统一都是暂时的:

?- \+ (\+ X = 1), print(X).
_G399
true.

_G399表示X未实例化)

于 2012-07-14T17:18:21.563 回答