Синтаксис и функциональность ограничений для значений простых и составных слотов, полей и переменных детально описаны в гл. 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 не допускает использование функций, не имеющих возвращаемого значения для инициализации или изменения значения слота.