6.3 Стратегия управления
Стратегия управления Пролога является расширением
стандартной стратегии управления («поиск слева направо в глубину с возвратом»),
соответствующей текстуальному упорядочению процедур и вызовов предикатов.
Отличиями акторного механизма от стандартной стратегии управления являются
возможности повторного доказательства акторов, а также задержки исполнения подцелей.
6.3.1 Исполнение вызова предиката
Общая схема исполнения вызова предиката (исполнения предиката)
включает следующие действия:
- Выбор предложения, заголовок которого:
- Содержит предикатный символ, совпадающий с
именем вызывающего предиката. В случае исполнения вызова функции,
запрещается выбирать предложения, заголовки которых не являются объявлениями функций.
- Является метапеременной.
- Содержит метафунктор в качестве предикатного
символа.
- Если следом за выбранным предложением в
рассматриваемом мире расположены ещё не исследованные предложения,
в исполняемом процессе создаётся новая точка выбора, обозначающая
поиск иных предложений, соответствующих условиям пункта 1.
- Построение копии предложения, отличающейся от
выбранного предложения тем, что все его переменные заменяются новыми
уникальными именами, а все атрибуты заменяются значениями слотов мира,
которому принадлежит предложение.
- Исполнение построенного предложения.
При этом исполнение вызовов предикатов различных типов о
существляется в соответствии со следующими дополнительными правилами и исключениями:
- Если значением целевого параметра в дальнем вызове
предиката является спейсер #, исполнение подцели заканчивается успехом
(без какого-либо связывания переменных).
- Если значением целевого параметра в дальнем вызове
предиката является элемент данных, исполнение подцели осуществляется
непосредственно в том мире, в котором исполняется рассматриваемое предложение.
При этом целевой параметр добавляется в исполняемый предикат в качестве
дополнительного аргумента перед другими аргументам предиката, но после аргумента,
обозначающего возвращаемое значение функции (в случае если исполняемая подцель
является вызовом функции).
- Исполнение дальних вызовов предикатов с
инфиксами «<<» и «< —» всегда заканчивается успехом
и заключается в подготовке
соответствующих прямых сообщений, передача которых откладывается до (успешного)
завершения рассматриваемой фазы исполнения процесса. Инфикс «<<» обозначает
информационные прямые сообщения, а инфикс «< —» — переключающие прямые сообщения.
- Исполнение дальних вызовов предикатов, не
имеющих инфикса «<<» или «< —», в мирах, не принадлежащих процессу,
в котором исполняется рассматриваемое предложение, невозможно и заканчивается неудачей.
- Исполнение акторных вызовов предикатов осуществляется
в соответствии с общей схемой, но при этом дополнительным необходимым условием
успешного завершения доказательства любого актора Р процесса G является
существование производных значений общих переменных процесса G. Для того
чтобы обеспечить существование требуемых производных значений, в момент
(успешного) завершения доказательства предиката Р осуществляется согласование
акторов процесса G. Доказательство актора Р считается успешным в том и только
в том случае, если завершаются успехом исполнение соответствующего предиката,
а также последующее согласование акторов, в противном случае происходит откат.
- Если атомарная формула исполняемого вызова предиката
в составе метапредложения является метапеременной, данная подцель
считается вызовом функции, если (и только если) рассматриваемое метапредложение
поставлено в соответствие вызову функции.
- Действия, осуществляемые при исполнении
предопределённых предикатов и встроенных управляющих операторов рассмотрены ниже.
Подцели копии предложения, построенной во время исполнения предиката, называются «подцелями доказательства».
6.3.2 Исполнение предложения
Будем говорить, что переменная или слот имеют
«задерживающее» («отключающее») значение, если они несвязаны или их
значение равно спейсеру #.
Задержанными подцелями называются подцели доказательства,
исполнение которых было отложено механизмом задержки исполнения подцелей. Списком
задержанных подцелей называется вспомогательный список подцелей доказательства,
используемый механизмом задержки исполнения подцелей.
Исполнение предложения включает:
- Унификацию функтора и аргументов исполняемого вызова
предиката с функтором и аргументами заголовка предложения или унификацию
вызова предиката с метапеременной (если заголовком предложения является
метапеременная). В случае если заголовок предложения является объявлением функции,
а исполняемый вызов предиката не является вызовом функции, перед унификацией в
начало списка аргументов исполняемого вызова добавляется фиктивный аргумент —
анонимная переменная «_».
- Пересмотр списка задержанных
подцелей, осуществляемый механизмом задержки исполнения подцелей.
- Исполнение соответствующих подцелей
доказательства. При этом подцели доказательства, целевые параметры
которых имеют задерживающие значения, пропускаются и добавляются в список
задержанных подцелей.
Исполнение предложения заканчивается успехом тогда и только тогда, когда успехом заканчиваются все три названные операции.
В случае унификации функтора исполняемого
вызова предиката с метафунктором, значением метафунктора становится
соответствующий терм — символ. В случае унификации исполняемого вызова
предиката с метапеременной, значением метапеременной становится соответствующий
терм — символ или структура. Однако при использовании названных
метафункторов и метаатомов в качестве предикатных символов и
предикатов подцелей, они рассматриваются, соответственно, как
правильно построенные имена предикатов и предикаты.
Вызов предопределённых предикатов и встроенных
управляющих операторов с помощью метаатомов невозможен и всегда заканчивается неудачей.
Примечание. Метаатом в заголовке метапредложения
может быть только символом или только структурой, потому что, в соответствии
с семантикой языка, количество аргументов структуры не может быть меньше единицы.
6.3.3 Механизм задержки исполнения
Механизмом задержки исполнения подцелей называется
вспомогательная стратегия управления, откладывающая исполнение выделенных
подцелей до тех пор, пока не будет вычислена некоторая информация, необходимая
для корректного исполнения этих подцелей.
Пересмотр списка задержанных подцелей осуществляется
следующим образом:
- Элементы списка просматриваются в том порядке, в котором они были в него добавлены.
- При обнаружении каждого элемента списка,
значение целевого параметра которого не является задерживающим, найденная
подцель исключается из рассматриваемого списка и исполняется.
6.3.4 Откат программы
Откатом называется возобновление исполнения процесса,
начиная с последней (неустранённой оператором отсечения) точки выбора.
Откат выполняется автоматически в случае неудачи какой-либо операции,
осуществляемой в ходе исполнения предложения.
В результате отката программы осуществляется восстановление
состояний акторов процесса, в котором произошёл откат, на момент прохождения последней
(неустранённой оператором отсечения) точки выбора (в том числе отмена всех связываний
и сцеплений переменных, произошедших в акторах с момента прохождения этой точки,
отмена нейтрализации и повторных доказательств акторов, а также отмена всех изменений,
внесённых в список задержанных подцелей).
В результате отката отменяются все прямые сообщения,
подготовленные после прохождения последней неустранённой точки выбора для
передачи из рассматриваемого процесса.
Содержание