<адрес-образца>::=?<имя-переменной> <- <образец>
Стрелка влево (<-) — необходимая часть синтаксиса. Переменная, связанная с адресом факта или объекта, может сравниваться с другой переменной или использоваться внешней функцией. Переменная, связанная с адресом факта или объекта, может быть также использована для последующего ограничения полей в образце условного выражения. Однако нельзя связывать переменную в условном выражении not.
В качестве примера приведем простое правило, которое удаляет все факты data.
Пример 6.23. Правило del-data-facts
(defrule del-data-facts
?data-facts <- (data $?)
=>
(retract?data-facts))
На этом рассмотрение синтаксиса и способов использования условного элемента образец (pattern СЕ) можно считать завершенным. Как вы уже успели убедиться, это довольно сложная конструкция языка CLIPS. Утешением может послужить то, что остальные условные элементы (test, and, or, not, exists, forall и logical) гораздо проще используют образцы в качестве основы. Их рассмотрением мы и займемся в следующих разделах.
|
|
6.5.2. Условный элемент test
Условный элемент test предоставляет возможность наложения дополнительных ограничений на слоты фактов или объектов. Элемент test удовлетворяется, если вызванная в нем функция возвращает значение не-false. Как и в случае предикатных ограничений образца в условном элементе test, можно использовать переменные, уже связанные со своими значениями. Внутри элемента test могут быть выполнены различные логические операции, например сравнения переменных.
Определение 6.17. Синтаксис условного элемента test
<ycлoвный-элeмeнт-test >::= (test <вызов-функции>)
Выражение test вычисляется каждый раз при удовлетворении других условных элементов. Это означает, что условный элемент test будет вычислен больше одного раза, если обрабатываемое выражение может быть удовлетворено более чем одной группой данных. Использование условного элемента test может стать причиной автоматического добавления правилу некоторых условных выражений. Кроме того, CLIPS может автоматически переупорядочивать условные элементы test (см. разд. 6.5.9).
Приведенное ниже правило находит пару фактов data, причем разница между значениями первых полей этих фактов должна быть больше или равной 3.