8.1 Корректное разрушающее присваивание



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

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

L:= R.

Исполнение этого предиката осуществляется следующим образом:

1. Аргументы предиката унифицируются друг с другом.

2. После выполнения первого шага происходит согласование акторов процесса в соответствии с правилами.

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

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

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

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

Пример.

Использование предиката разрушающего присваивания.
Рассмотрим поведение доказанного актора, определённого с помощью фрагмента программы

class 'Main': х;

[
goal:-

subgoal(x).

subgoal(l).
subgoal(3).
subgoal(5).

В результате исполнения предиката х:=5, актор goal будет нейтрализован и доказан повторно, производное значение общей переменной х станет равным 5.



Содержание