Функция сравнения также использует знак =. Разница между ними может быть определена по контексту.
Возвращаемое значение должно быть одним из простых типов данных CLIPS. Это значение, возвращенное функцией, объединяется с образцом так, как если бы оно было символьным ограничением. Заметьте, что функция вычисляется при каждом сопоставлении образцов, а не один раз при определении правила.
Ограничения, возвращающие значения, имеют следующий синтаксис:
Определение 6.13. Синтаксис ограничения, возвращающего значение
=<вызов-функции>
Определения понятия "элемент", приведенные в предыдущем разделе, примут такой вид:
Определение 6.14. Синтаксис понятия "элемент"
<элемент> ::= <константа>│
<простая-переменная>|
<составная-переменная>|
:<вызов-функции>
=<вызов-функции>
Правило из примера 6.21 выводит на экран такие факты data, в которых значение второго поля в два раза больше, чем значение первого. В нашем случае это факты (data 1 2) И (data 2 4).
Пример 6.21. Использование ограничения, возвращающего значение
(assert (data I 2)
(data 2 3)
(data 24))
(defrule Find-data
(data ?x ?y&=(* 2 ?x))
=>
(printout t "x=" ?x " y=" ?y crlf))
6.5.3. Условный элемент or
Условный элемент or позволяет активировать правило любым из нескольких заданных условных элементов. Если какой-нибудь из условных элементов, объединенных с помощью or, удовлетворен, то и все выражение or считается удовлетворенным. В этом случае, если все остальные условные элементы, входящие в левую часть правила (но не входящие в or), также удовлетворены, правило будет активировано. Условный элемент or может объединять любое количество элементов.