(defrule example
(data?x)
(data?y)
(test (>= (abs (-?y?x)) 3))
=>)
Условный элемент test может привести к автоматическому добавлению образцов initial-fact или initial-object в левую часть правила. Поэтому не забывайте использовать команду reset (которая создает initial-fact и initial-object), чтобы быть уверенным в корректной работе условного элемента test.
6.5.3. Условный элемент or
Условный элемент or позволяет активировать правило любым из нескольких заданных условных элементов. Если какой-нибудь из условных элементов, объединенных с помощью or, удовлетворен, то и все выражение or считается удовлетворенным. В этом случае, если все остальные условные элементы, входящие в левую часть правила (но не входящие в or), также удовлетворены, правило будет активировано. Условный элемент or может объединять любое количество элементов.
Замечание
Правило будет активировано для каждого выражения в условном элементе or, которое было удовлетворено. Таким образом, условный элемент or производит эффект, идентичный написанию нескольких правил с похожими посылками и следствиями.
|
|
Определение 6.18. Синтаксис условного элемента or
<условный-элемент-ог >::= (or <условный-элемент>+)
Пример 6.25. Применение условного элемента or
(defrule system-fault
(error-status unknown) (or (temp high)
(valve broken)
(pump off))
=>
(printout t "The system has a fault." crlf))
Данное правило сообщит о поломке системы, если в списке фактов будет присутствовать факт error-status unknown и один из фактов temp high, valve broken или pump off. В случае если будут присутствовать два из этих трех фактов, например temp high и pump off, то сообщение будет выведено два раза. Заметьте, что приведенный пример — точный эквивалент следующих трех отдельных правил: