(defmodule MAIN)
Все предопределенные системные классы принадлежат системному модулю main, однако нет необходимости экспортировать или импортировать системные классы в другие модули, они всегда находятся в области видимости определенных пользователем модулей. Предопределенный системный модуль main не импортирует и не экспортирует никаких конструкций. Однако, в отличие от других модулей, пользователь может один раз переопределить модуль main после запуска системы или выполнения команды clear.
Определения модулей в конструкторах
Для определения, в какой модуль будет помещена та или иная конструкция языка, созданная соответствующим конструктором, в конструкторе необходимо указать имя модуля. Конструкторы deffacts, deftemplate, defrule, deffunction, defgeneric, defclass и definstances для определения имени модуля позволяют включать его в имя соответствующей конструкции. Конструктор defglobal принимает имя модуля в специально отведенное для этого поле, которое следует сразу за ключевым словом defglobal. Конструктор defmessage-handier принимает имя модуля как часть определения класса, с которым связывается сообщение. Конструктор defmethod принимает имя модуля как часть определения родовой функции, которой принадлежит данный метод. Например, все приведенные ниже конструкторы будут помещены в модуль DETECTION.
|
|
Пример 12.1. Применение спецификации модуля
(defrule DETECTION::Find-Fault
(sensor (name?name) (value bad))
=>
(assert (fault (name?name))))
(defglobal DETECTION?*count* = 0)
(defmessage-handler DETECTION::COMPONENT get-charge ()
(*?self:flux?self:flow))
(defmethod DETECTION::+ ((?x STRING) (?y STRING))
(str-cat?x?y))
Выполните следующую последовательность действий: