![](/user_photo/1334_ivfwg.png)
- •Алфавит языка
- •Лексика
- •Лексемы
- •Переменные
- •Символы и ключевые слова
- •Числовые литералы
- •Сегменты строк
- •Ограничители
- •Комментарии
- •Определение данных
- •Простые термы
- •Составные термы
- •Структуры
- •Списки
- •Недоопределённые множества
- •Унификация термов
- •Структура программы
- •Классы
- •Атрибуты классов
- •Инициализаторы слотов
- •Конструкторы
- •Проект
- •Пакеты
- •Трансляция исходных файлов
- •Структура пространства поиска
- •Экземпляры классов
- •Процессы
- •Состояния процесса
- •Порты процессов
- •Резиденты
- •Построение пространства поиска
- •Исполнение конструкторов
- •Построение слотов
- •Предложения классов
- •Атомарные формулы
- •Простые атомы
- •Бинарные отношения
- •Объявления функций
- •Подцели предложений
- •Вызовы функций
- •Выражения
- •Стратегия управления
- •Исполнение вызова предиката
- •Исполнение предложения
- •Механизм задержки исполнения
- •Откат программы
- •Акторы и повторные доказательства
- •Акторы
- •Общие переменные
- •Построение общих переменных
- •Согласование акторов процесса
- •Сопоставление локальных значений
- •Исполнение повторных доказательств
- •Согласование процессов
- •Классификация сообщений
- •Прямые сообщения
- •Потоковые сообщения
- •Исключительные ситуации
- •Встроенные предикаты и операторы
- •Корректное разрушающее присваивание
- •Актуализация производных значений
- •Сводка синтаксиса
- •Свойства, зависящие от реализации
- •Термины и определения
- •Список понятий языка
24 |
Глава 3. ОПРЕДЕЛЕНИЕ ДАННЫХ |
3.3Унификация термов
Унификацией называется операция сравнения (отождествления) нескольких формул, связывающая переменные в составе формул сопоставленными с ними подформулами.
Унификация термов осуществляется в ходе исполнения вызовов предикатов, в момент создания значений недоопределённых множеств, а также во время глобальных операций с общими переменными. Кроме того, унификация термов может быть вызвана явно с помощью встроенного предиката «унифицировать термы»:
L == R.
Встроенный предикат ’==’ разрешается использовать с произвольным количеством аргументов:
’==’(V1,. . . ,Vk).
Унификация несвязанной переменной с константой, составным термом или миром вызывает «связывание» этой переменной — замену всех вхождений этой переменной соответствующим элементом данных или миром.
Унификация различных несвязанных переменных вызывает их «сцепление» (отождествление): в дальнейшем любое связывание одной из сцеплённых переменных автоматически вызывает такое же связывание всех сцеплённых с ней переменных.
ВАкторном Прологе область действия операций связывания и сцепления переменной всегда ограничена множеством её вхождений, принадлежащих некоторым конкретным акторам.
ВАкторном Прологе допускается унификация целых и вещественных чисел. Унификация целого и вещественного чисел заканчивается успехом тогда и только тогда, когда вещественное число обозначает целую величину, равную унифицируемому с ней целому числу.
Константы и составные термы несопоставимы между собой (их
унификация невозможна). Невозможна также унификация констант и составных термов с экземплярами классов. Унификация термов, обозначающих миры, возможна лишь в том случае, если они обозначают один и тот же мир. Спейсер не может быть унифицирован ни с какой другой константой, кроме себя.
Проверкой вхождения называется специальная операция, осуществляемая в ходе унификации, предотвращающая (запрещающая) связывание
3.3. УНИФИКАЦИЯ ТЕРМОВ |
25 |
переменной с составными термами, содержащими эту переменную. В соответствии с семантикой Акторного Пролога, проверка вхождения не распространяется на переменные в составе миров, являющихся компонентами унифицируемых термов.
В максимальной версии языка в ходе унификации осуществляется проверка вхождения. В быстрой версии проверка вхождения используется только во время глобальных операций с общими переменными. В минимальной версии языка проверка вхождения не используется, однако во время глобальных операций, при обнаружении переменной, связанной с термом, содержащим эту переменную, допускается вызов исключительных ситуаций.
Пример. Унификация двух составных термов:
{region:X,name:"Baikal"|Rest1}
==
{name:Y,object:’lake’,region:"Siberia"}
Входе унификации элементы одного множества будут унифицированы
сэлементами другого в соответствии с заданными именами элементов. Результатом унификации станут подстановки X="Siberia", Y="Baikal", на месте переменной Rest1 окажется значение G недоопределённого множества, включающего одну-единственную пару object:’lake’. Остальные позиции кортежа G (кроме первой, которая всегда содержит set) будут заполнены z.
Ссылки: актор 7.1, встроенный предикат 8, глобальные операции 7.2, данные 3, значение терма 3, имя элемента 3.2.3, исключительная ситуация 7.5, исполнение предиката 6.3.1, константа 3.1, мир 5.1, недоопределённое множество 3.2.3, несвязанная переменная 3.1, переменная 2.1.1, принадлежать актору 7.2, составной терм 3.2, спейсер 3.1, терм 3, число 3.1, элемент множества 3.2.3.
26 |
Глава 3. ОПРЕДЕЛЕНИЕ ДАННЫХ |