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 但它没有帮助我,因为没有澄清差异,也没有 \= 的简短含义。
谢谢。
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 但它没有帮助我,因为没有澄清差异,也没有 \= 的简短含义。
谢谢。
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
未实例化)