|
|||
Унификация6. Унификация Этот параграф был исправлен в связи с тем, что версия SWI-Prolog (Multi-threaded, 32 bits, Version 6.0.2) изменила формат ответа на запрос, хотя, по сути, он остался прежним.
Одна из самых мощных особенностей Пролога - его встроенный алгоритм сопоставления с образцом, унификация. Реализация механизма поиска решений – это и есть реализация алгоритма унификации. Важность унификации состоит в том, что посредством её происходит передача аргументов и возврат значений из процедур.
Чтобы разобраться с унификацией, мы обсудим встроенный предикат равенства =/2, который успешен, если оба его параметра унифицируются и не успешен, в противном случае. Как оператор он записывается следующим образом.
arg1 = arg2
Надо заметить, что знак "=" не является присваиванием, как в большинстве языков программирования, и не вызывает арифметических действий. Он вызывает действие унификации.
Унификация между двумя сторонами знака "=" точно такая же, как унификация, которая происходит, когда Пролог пробует согласовывать цель с головой предложения.
При отслеживании в обратном порядке, связывания переменных с их значениями, уничтожаются, также, как это происходит, когда Пролог делает отслеживание в обратном порядке при работе с предложениями.
6.1 Самая простая форма унификации встречается междудвумя константами.
Если они идентичны, то унификация успешна. Если это не так, тогда неуспешна и унификация. ?- 1 = 1.true. ?- a = a.true. ?- a = b.false. ?- фрукты(яблоки, груши) = фрукты(яблоки, груши).true. ?- фрукты(яблоки, груши) = фрукты(сливы, груши).false.?- a(b,c(d,e(f,g))) = a(b,c(d,e(f,g))).
|
|||
|