Хелпикс

Главная

Контакты

Случайная статья





Унификация



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))).



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.