Получение значений по умолчанию с помощью атрибутов ограничений
Если для слотов объекта или факта значения по умолчанию явно не заданы, то эти значения могут автоматически получаться из атрибутов ограничений. Для этого используются следующие правила:
1. Тип по умолчанию выбирается из списка допустимых типов, заданных атрибутом type. При этом используется следующий порядок приоритетов типов:SYMBOL, STRING, INTEGER, FLOAT, INSTANCE-NAME, INSTANCE-ADDRESS, FACT-ADDRESS, EXTERNAL-ADDRESS.
2. Если тип по умолчанию имеет заданные константные ограничения (например, атрибут allowed-integers для типа integer), то первое значение, заданное в константном ограничении, используется в качестве значения по умолчанию для данного слота.
3. Если значение по умолчанию нельзя определить на шаге 2, а тип слота по умолчанию integer или float, и для данного слота задан атрибут диапазона, то, если нижняя граница диапазона не равна значению ?variable, это значение используется в качестве значения по умолчанию. В случае если нижняя граница диапазона равна значению ?variable, а верхняя неравна ?variable, то в качестве значения по умолчанию используется верхняя граница диапазона.
4. Если значение по умолчанию нельзя определить на шаге 2 и 3, то в качестве значения по умолчанию для слота берутся значения по умолчанию для типов. Это nil для типа symbol, "" для типа string, 0 для integer, 0.0 для FLOAT, [nil] для INSTANCE-NAME, указатель на несуществующий объект для INSTANS-ADDRESS, указатель на несуществующий факт для FACT-ADDRESS и NULL для EXTERNAL-ADDRESS.
5. Шаги 1—4 используются для определения значения по умолчанию для простых слотов. Значение по умолчанию для составных слотов — это составное значение нулевой длины. Однако если составной слот имеет атрибут ограничения мощности, задающий минимальную мощность слота, большую 0, то в качестве значения по умолчанию для этого слота используется составное значение с количеством полей, равным минимальной мощности поля. Каждое поле при этом содержит значение по умолчанию, определенное с помощью шагов 1—4.
Примеры нарушения ограничений
В этом разделе приведено несколько примеров, иллюстрирующих некоторые типы нарушений ограничений, которые обнаруживает CLIPS.
Введите в CLIPS следующий конструктор deftemplate.
Пример 13.1. Шаблон с ограничениями
(deftemplate bar
(slot a (type SYMBOL INTEGER))
(slot b (type INTEGER FLOAT))
(slot с (type SYMBOL STRING)))
Теперь попробуем ввести правило, использующее созданный шаблон.
Дата добавления: 2021-12-14; просмотров: 257;