Подтвердить что ты не робот

Не равный и не объединяющийся в Prolog

В чем разница между A\= B и не (A == B) в Prolog?

Я нашел этот http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse5 и эта страница вики http://en.wikibooks.org/wiki/Prolog/Built-in_predicates но это мне не помогло, так как нет разницы в различии или короткого значения для \=.

Спасибо.

4b9b3361

Ответ 1

A \= B эквивалентно not (A = B)

Итак, сначала сравним =/2 и ==/2; из руководства swi-proog:

? Term1 =? Term2
    Унифицируйте Term1 с помощью Term2. Истинно, если унификация преуспевает

@Term1 == @Term2
    True, если Term1 эквивалентен Term2.

Обратите внимание, что =/2 пытается унифицировать термины, и если он преуспевает в этом true, а ==/2 выполняет проверку:

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

while

?- X == 1.
false.

а также:

?- X = Y.
X = Y.

?- X == Y.
false.

теперь not/1 инвертирует результат и будет true, если =/2 или ==/2 было ложным.
для ==/2 нет ничего сложного; если бы эти условия были эквивалентны, то они вернут false, иначе true. для =/2 вы должны помнить, что все унификации будут временными:

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

(_G399 указывает, что X не создается)