Пример 11.41. Класс а и обработчики сообщений put-x и delete
(defclass A (is-a USER)
(role concrete)
(slot x (default 34)
(create-accessor write))
(slot у (default abc)))
(defmessage-handler A put-x before (?value)
(printout t "Slot x set with message." crlf) )
(defmessage-handler A delete after ()
(printout t "Old instance deleted. " crlf))
После этого попробуйте создать объект с помощью функции make-instance, удалить его и создать объект с переопределением значения для некоторого слота. Обратите внимание на содержимое слотов объекта и выводимые на экран сообщения. Пример подобных операций с объектом приведен на рис. 11.21
Рис. 11.21.Использование команды make-instance
Конструктор definstances
Подобно конструктору deffacts, конструктор definstances позволяет определять объекты, которые будут создаваться каждый раз при выполнении команды reset. При выполнении reset все текущие объекты получают сообщение delete, после чего CLIPS производит вызовы функции make-instance для каждого объекта, определенного в конструкторе definstances.
Определение 11.17. Синтаксис конструктора definstances
(definstances <имя> [active] [<комментарии>]
<шаблоны-объектов>)
<шаблон-объекта>::= (<определение-объекта>)
Конструктор definstances не может использовать классы, которые еще не были определены. Объекты, заданные в definstances, создаются по порядку, и если создание какого-либо объекта заканчивается неудачно, оставшиеся объекты не будут созданы. Кроме того, будет прервано выполнение других конструкторов definstances, если они существуют. Обычно для создания
объектов definstances используют функцию make-instance (что вызывает задержку текущего процесса сопоставления образцов). Однако, если это не желательно, можно написать ключевое слово active после имени конструктора definstances, что укажет конструктору на необходимость воспользоваться функцией active-make-instance.
Создайте конструкторы, представленные в примере 11.42.
Дата добавления: 2021-12-14; просмотров: 269;