<ycлoвный-элeмeнт-and> ::= (and <условный-элемент>+)
Пример 6.27. Применение условного элемента and
(defrule system-flow
(error-status confirmed)
(or (and (temp high)
(valve closed))
(and (temp low)
(valve open)))
=>
(printout t "The system is having a flow problem. " crlf))
Если условный элемент and содержит условные элементы test или not в качестве первого элемента, то перед ними автоматически добавляется образец initial-fact или initial-object. Помните, что левая часть любого правила содержит неявный элемент and, поэтому приведенное в примере 6.28 правило будет автоматически преобразовано (см. пример 6.29).
Пример 6.28. Правило nothing-to-schedule
(defrule nothing-to-schedule
(not (schedule ?))
=>
(printout t "Nothing to schedule." crlf))
Пример 6.29. Преобразованное правило nothing-to-schedule
(defrule nothing-to-schedule
(and (initial-fact)
(not (schedule ?)))
=>
(printout t "Nothing to schedule." crlf))
6.5.5. Условный элемент not
Иногда важнее отсутствие информации, а не ее присутствие, т. е. возникают ситуации, когда необходимо запустить правило, если образец или другой условный элемент не удовлетворяется (например, факт не существует). Условный элемент not предоставляет эту возможность. Элемент not удовлетворяется, только если условный элемент, который он содержит, не удовлетворяется.