Пример 6.26. Эквивалент правилу system-fault

(defrule system-fault-1

(error-status unknown)

(pump off)

=>

(printout t "The system has a fault." crlf))

(defrule system-fault-2

(error-status unknown) (valve broken)

=>

(printout t "The system has a fault." crlf))

(defrule system-fault-3

(error-status unknown) (temp high)

=>

(printout t "The system has a fault." crlf))

6.5.4. Условный элемент and

Все условные элементы в левой части правил CLIPS объединены неявным условным элементом and. Это означает, что все условные элементы, задан­ные в левой части, должны удовлетвориться, для того чтобы правило было активировано. С помощью явного применения условного элемента and можно смешивать различные условия and и or и группировать элементы так, как этого требует логика правил. Условие and удовлетворяется, только если все условия внутри явного and удовлетворены. В случае, если остальные условия в левой части правила также истинны, правило будет активировано. Элемент and может объединять любое число условных элементов.

Определение 6.19. Синтаксис условного элемента and

<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 удовле­творяется, только если условный элемент, который он содержит, не удовле­творяется.


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



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