Оператор = "в" Пролога на самом деле является предикатом (с инфиксной нотацией) = / 2 , который завершается успешно, когда два члена объединены.Таким образом, X = 2
или 2 = X
означают одно и то же, цель объединить X
с 2.
Оператор == "отличается" тем, что он успешен, только если два термина уже идентичны бездальнейшее объединение.Таким образом, X == 2
имеет значение true, только если переменной X
ранее было присвоено значение 2.
Добавлено: Интересно поработать над тем, что происходит, когда "не" смешивается с этимицели, согласно комментарию JohnS ниже.Смотрите хороший набор примеров в Amzi!Пролог документации.
\=
означает, что два термина не могут быть объединены, то есть, что объединение не удается.Как и во всех случаях применения отрицания как отказа, «не унифицировано» не приводит (и не может) привести к какому-либо объединению терминов.
\==
означает, что оба термина не идентичны.Здесь также не происходит объединения, даже если это удастся.
Наконец, подумайте о том, что будет делать not(not(X = Y))
.Внутренняя цель будет успешной, если X и Y (которые могут быть произвольными терминами) могут быть объединены, как и двойное отрицание этого.Однако заключение внутренней цели в двойное отрицание приводит к достижению цели, которая достигает , если эти два термина могут быть объединены , но без объединения этих терминов .
.упражнение для читателя обдумать, имеет ли not(not(X == Y))
аналогичную утилиту.