Определение 11.16. Синтаксис функций make-instance и active-make-instance

(make-instance <определение-объекта>)

(active-make-instance <определение-объекта>)

<определение-объекта>::= [<имя-объекта>] of

<имя-класса>

<переопределения-слотов>

<переопределение-слота>::= (<имя слота> <значение>)

В случае успеха функция make-instance возвращает имя только что создан­ного объекта, в противном случае возвращает значение false. Определение имени объекта является необязательным. Если имя объекта не задано, CLIPS воспользуется функцией gensym* для автоматической генерации имени.

В процессе выполнения функция make-instance совершает следующие действия:

1. Если объект с заданным именем уже имеется, то существующий объект получает сообщение delete, Т.е. (send <имя-объекта> delete). Если по какой-то причине эта операция завершается неудачно, создание нового объекта прерывается.

2. Создается новый неинициализированный объект заданного класса с заданным именем.

3. Значения всех переопределяемых слотов немедленно вычисляются и устанавливаются с помощью сообщения put-, т.е. (send <имя-объекта> рut-<имя-слота> <выражение>*). Если в процессе этой операции возникнет какая-либо ошибка, новый объект будет удален.

4. Новый объект получает сообщение init: (send <имя-объекта> init). Предопределенный системный обработчик этого сообщения вызывает функцию init-siots. Данная функция использует значения по умолчанию из определения класса (если они есть) для всех слотов, которые не были переопределены. Установки слотов класса по умолчанию помещаются непосредственно в слот без использования сообщений. Если на этом этапе возникает ошибка, новый объект также удаляется.

Для иллюстрации работы описанного алгоритма определите в среде CLIPS класс и обработчики сообщения, представленные в примере 11.41.


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



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