Пример 11.28. Использование обработчиков put-special и special-put
(make-instance a of A (special 1))
(send [a] put-special 2)
(send [a] special-put 3)
Вы должны получить результат, идентичный приведенному на рис. 11.11. Легко заметить, что несмотря на то, что для данного класса а существует стандартный акцессор, функция make-instance для инициализации слота special использует обработчик special-put.
Грань ограничений
Синтаксис и функциональность ограничений для значений простых и составных слотов, полей и переменных детально описаны в гл. 13. CLIPS поддерживает проверку статических и динамических ограничений для классов и объектов классов. Проверка статических ограничений осуществляется при выполнении конструктора или команды, определяющих значение слота. Кроме того, выполняется проверка объектов-образцов, используемых в левой части правил для определения наличия конфликтов между ограничениями переменными. В случае возникновения ошибки соответствующая информация сразу предоставляется пользователю. Режим статической проверки ограничений включен по умолчанию. Эту установку можно изменить с помощью функции set-static-constraint-checking.
Кроме статической проверки CLIPS поддерживает возможность динамической проверки ограничений слотов. Если этот режим включен, то значения слотов проверяются при каждом изменении, включая изменения с помощью стандартных акцессоров или обработчиков сообщений, определенных пользователем. По умолчанию этот режим выключен. Данную
установку можно изменить с помощью функции set-dynamic-constraint-checking. Если нарушение ограничения происходит в момент выполнения программы, то выполнение будет завершено.
Помимо описанных выше функций для изменения состояния статической и динамической проверки ограничений, пользователям Windows-версии среды CLIPS доступен визуальный способ установки режимов проверки ограничений. Для этого необходимо открыть новое окно Execution Options,выбрав пункт Optionsв меню Execution.Внешний вид этого диалогового окна приведен на рис. 11.12. Для включения или отключения статической и динамической проверки ограничений установите в соответствующее положение флажки Static Constraint Checking и Dynamic Constraint Checking.
Рис. 11.12.Установка режимов проверки ограничений
Независимо от включенных режимов проверки ограничений, значения составных полей не могут быть сохранены в простые слоты. Значения простых слотов конвертируются в значения составных слотов с длиной, равной 1, при сохранении в простой слот значения составного поля. Кроме того, CLIPS не допускает использование функций, не имеющих возвращаемого значения для инициализации или изменения значения слота.
Дата добавления: 2021-12-14; просмотров: 256;