3.3Унификация термов



Унификацией называется операция сравнения (отождествления) нескольких формул, связывающая переменные в составе формул сопоставленными с ними подформулами.

Унификация термов осуществляется в ходе исполнения вызовов предикатов, в момент создания значений недоопределённых множеств, а также во время глобальных операций с общими переменными. Кроме того, унификация термов может быть вызвана явно с помощью встроенного предиката «унифицировать термы»:

L== R.

Встроенный предикат '==' разрешается использовать с произвольным количеством аргументов:

'==(V1.....Vk).


Унификация несвязанной переменной с константой, составным термом или миром вызывает «связывание» этой переменной — замену всех вхождений этой переменной соответствующим элементом данных или миром.

Унификация различных несвязанных переменных вызывает их «сцепление» (отождествление): в дальнейшем любое связывание одной из сцепленных переменных автоматически вызывает такое же связывание всех сцепленных с ней переменных.

В Прологе область действия операций связывания и сцепления переменной всегда ограничена множеством её вхождений, принадлежащих некоторым конкретным акторам.

В Прологе допускается унификация целых и вещественных чисел. Унификация целого и вещественного чисел заканчивается успехом тогда и только тогда, когда вещественное число обозначает целую величину, равную унифицируемому с ней целому числу.

Константы и составные термы несопоставимы между собой (их унификация невозможна). Невозможна также унификация констант и составных термов с экземплярами классов. Унификация термов, обозначающих миры, возможна лишь в том случае, если они обозначают один и тот же мир. Спейсер не может быть унифицирован ни с какой другой константой, кроме себя.

Проверкой вхождения называется специальная операция, осуществляемая в ходе унификации, предотвращающая (запрещающая) связывание переменной с составными термами, содержащими эту переменную. В соответствии с семантикой Пролога, проверка вхождения не распространяется на переменные в составе миров, являющихся компонентами унифицируемых термов.

В максимальной версии языка в ходе унификации осуществляется проверка вхождения. В быстрой версии проверка вхождения используется только во время глобальных операций с общими переменными. В минимальной версии языка проверка вхождения не используется, однако во время глобальных операций, при обнаружении переменной, связанной с термом, содержащим эту переменную, допускается вызов исключительных ситуаций.

Пример.
Унификация двух составных термов:

{region:X,name:" Baikal" | Restl} {name:Y,object:' lake', region: "Siberia"}

В ходе унификации элементы одного множества будут унифицированы с элементами другого в соответствии с заданными именами элементов. Результатом унификации станут подстановки X="Siberia", Y="Baikal", на месте переменной Restl окажется значение G недоопределённого множества, включающего одну-единственную пару object:'lake'. Остальные позиции кортежа G (кроме первой, которая всегда содержит set) будут заполнены z.



Содержание