Определение 7.1. Синтаксис конструктора defglobal

(defglobal [<имя-модуля>] <определение-переменной>*)

<определение-переменной> ::= <имя-переменной> = <выражение>

<имя-переменной>::= ?* <значение-типа-symbоl>*

В одном конструкторе может быть объявлено произвольное количество пе­ременных. CLIPS позволяет использовать произвольное количество конст­рукторов defglobal. Необязательный параметр <имя-модуля> определяет модуль, в котором должны быть определены конструируемые переменные. Если имя модуля не задано, то переменные будут помещены в текущий мо­дуль. В случае если создаваемая переменная уже была определена, то старое определение будет заменено новым. Если при выполнении конструктора defglobal возникает ошибка, то CLIPS произведет добавление всех пере­менных, заданных до ошибочного определения.

Команды, использующие глобальные переменные, например, такие как ppdefglobal или undefglobal, применяют значение типа symbol, являющееся именем переменной без символов ? и * (например, max для переменной, определенной как ?*mах*).

Глобальные переменные могут быть использованы в любом месте, где могут быть использованы переменные, созданные в левой части правил с некото­рыми исключениями. Во-первых, глобальные переменные не могут исполь­зоваться как параметры в конструкторах deffunction, defmethod или обра­ботчиках сообщений. Во-вторых, глобальные переменные не могут использоваться для получения новых значений в левой части правил. Например, правило из примера 7.1 недопустимо.

Пример 7.1. Неверное использование глобальной переменной

 

(defrule example

(fact ?*х*) =>)

А применение глобальной переменной так, как представлено в примере 7.2, вполне возможно.