Получение значений по умолчанию с помощью атрибутов ограничений

Если для слотов объекта или факта значения по умолчанию явно не заданы, то эти значения могут автоматически получаться из атрибутов ограничений. Для этого используются следующие правила:

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)))

Теперь попробуем ввести правило, использующее созданный шаблон.


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



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