8.1 Корректное разрушающее присваивание
Разрушающим присваиванием в Прологе называется
изменение производных значений общих переменных процесса,
сопровождаемое нейтрализацией и повторным доказательством
некоторых зависящих от них акторов.
Для изменения производных значений общих переменных
некоторого процесса непосредственно в ходе доказательства актора Р, принадлежащего
этому процессу, используется (недетерминированный) встроенный предикат разрушающего
присваивания
L:= R.
Исполнение этого предиката осуществляется следующим образом:
1. Аргументы предиката унифицируются друг с другом.
2. После выполнения первого шага происходит согласование
акторов процесса в соответствии с правилами.
Доказательство предиката считается успешным в том и
только в том случае, если завершаются успехом унификация его аргументов,
а также последующее согласование акторов процесса.
Встроенный предикат разрушающего присваивания разрешается использовать с произвольным количеством аргументов:
':='(V1.....Vk).
Примечание. Встроенный предикат разрушающего
присваивания является недетерминированным потому,
что вызываемое им повторное доказательство акторов,
в общем случае, может приводить к построению новых точек выбора.
Пример.
Использование предиката разрушающего присваивания.
Рассмотрим поведение доказанного актора, определённого с помощью фрагмента программы
class 'Main': х;
[
goal:-
subgoal(x).
subgoal(l).
subgoal(3).
subgoal(5).
В результате исполнения предиката х:=5,
актор goal будет нейтрализован и доказан повторно,
производное значение общей переменной х станет равным 5.
Содержание