Определение 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, вполне возможно.