Пример 7.2. Допустимое применение глобальной переменной

(defrule example

(fact?y &:(>?у?*х*)) =>)

Изменение глобальной переменной не приводит к запуску процесса сопос­тавления образцов. Например, если в базу знаний системы был добавлен факт (fact 3) и переменной?*х* было присвоено значение 4, правило не будет активировано из-за того, что в системе отсутствует набор данных, удовлетворяющих правило. Если после этого переменной?*х* присвоить значение 2, несмотря на то, что текущий набор данных удовлетворяет всем условиям правила, оно все равно не будет активировано, т. к. изменение глобальной переменной не привело к запуску процесса сопоставления об­разцов.

Рассмотрим пример использования конструктора defglobal.

Пример 7.3. Использование конструктора defglobal

(defglobal

?*x*=3

?*y*=?*x*

?*z*=(+?*x*?*y*)

?*q*=(create$ a b c)

)

После выполнения данного конструктора в CLIPS появятся 4 глобальные переменные: х, у, z и q. Переменной х присваивается целое значение 3. Пе­ременной у — значение, сохраненное в глобальной переменной х (т. е. 3). Переменной z — сумма значений х и у (т. е. 6). Переменной q присваивает­ся значение, равное составному полю, содержащему 3 значения типа symbol (а, b и с), созданному с помощью функции create$. В случае если в конструкторе defglobal не было допущено синтаксических ошибок, то defglobal не возвращает никаких значений. Если ошибки имели место, то пользователь получит соответствующее сообщение. Обратите внимание, что переменная у не является указателем на переменную х, просто их значения в данный момент совпадают. Если изменить значение х, значения перемен­ных у и z, несмотря ни на что, останутся равными 3 и б соответственно.

Чтобы увидеть результат работы конструктора defglobal, можно воспользо­ваться командой list- defglobals, для вывода на экран списка всех глобаль­ных переменных. Добавьте еще один конструктор defglobal, объявляющий переменные вещественного и текстового типа, а также переменную со зна­чением типа symbol.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: