Пример 6.44. Использование условного элемента logical

(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]))




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