(clear)
(reset)
(defrule example
(logical (a))
(b)
=>
(assert (c)))
(assert (a) (b))
(run)
(retract 2)
(retract 1)
По команде run правило example, активированное фактами а и b, добавляет новый факт с, который имеет логическую поддержку (зависит) от факта а.
После удаления факта b с помощью команды (retract 2) ничего особенного не происходит, но если мы удалим факт а, то увидим, что это тут же приведет к удалению связанного с ним факта с.
Как упоминалось в подразделе "Сопоставление образцов с объектами"разд. 6.5.1, условный элемент logical может быть использован для создания данных, которые будут логически связаны с изменениями некоторых отдельных слотов объекта, а не от всего объекта целиком. Данную возможность можно использовать только при работе с объектом. При работе с шаблонами фактов данную возможность использовать нельзя, т. к. изменения слота факта, как было рассмотрено в разд. 5.2.5, фактически приводит к удалению старого факта и добавления нового с измененными слотами и индексом. В отличие от фактов изменения слотов объекта выполняются без удаления объекта. Это поведение иллюстрируется приведенным ниже примером:
Пример 6.45. Использование условного элемента logical с объектами
(clear)
(defclass A (is-a USER)
(role concrete)
(pattern-match reactive)
(slot foo (create-accessor write))
(slot bar (create-accessor write)))
(defrule match-A
(logical (object (is-a A) (foo?)))
=>
(assert (new-fact)))
(make-instance a of A)
run)
send [a] put-foo 100)
После выполнения команды run правило match-A добавляет факт new-fact, логически связанный с конкретным значением слота foo объекта а. При изменении значения данного слота факт new-fact автоматически удаляется из списка фактов.
Автоматическое добавление
И перегруппировка условных элементов
В некоторых ситуациях CLIPS автоматически добавляет дополнительные образцы к левой части правил (обычно для улучшения алгоритма сопоставления образцов, используемого системой CLIPS). Существует два образца, применяемых CLIPS по умолчанию: образец факта initial-object и образец объекта initial-object.
Ниже приводится определение этих данных:
Определение 6.24. Синтаксис предопределенного факта и объекта
(initial-fact)
(object (is-a INITIAL-OBJECT) (name [initial-object]))






