在Prolog中不相等而不统一

时间:2012-07-14 16:59:55

标签: prolog

Prolog中A \ = B与否(A == B)之间有什么区别?

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

感谢。

1 个答案:

答案 0 :(得分:17)

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

首先让我们先比较=/2==/2;来自swi-prolog手册:

  

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

     

@ Term1 == @ Term2
      如果Term1等同于Term2,则为True。

请注意,=/2会尝试统一这些字词,如果成功,则==/2只会执行检查时为真:

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

?- X == 1.
false.

还有:

?- X = Y.
X = Y.

?- X == Y.
false.

现在,not/1会反转结果,如果=/2==/2为假,则为真。
==/2没有什么复杂的;如果这些条款现在相同则会返回false,否则为真 对于=/2,你应该记住所有的统一都是暂时的:

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

_G399表示X未实例化)