在Prolog中不相等而不统一

Vit*_*Pom 12 prolog

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

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

谢谢.

Tha*_*dis 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.)
Run Code Online (Sandbox Code Playgroud)

?- X == 1.
false.
Run Code Online (Sandbox Code Playgroud)

并且:

?- X = Y.
X = Y.

?- X == Y.
false.
Run Code Online (Sandbox Code Playgroud)

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

?- \+ (\+ X = 1), print(X).
_G399
true.
Run Code Online (Sandbox Code Playgroud)

(_G399表示X未实例化)