Процесс сопоставления с образцом не имеет конкретных знаний о том, что может повлиять на результат оценки функции предиката на LHS правила (в данном случае функция instance-Существовать).В этом случае ваше правило сопоставляется только с экземплярами класса B, поэтому только изменения в этом экземпляре будут направлены на сопоставление с шаблоном повторного запуска.Когда экземпляр classB изначально сопоставлен, функция instance-existp оценивается и либо успешно, либо с ошибками.Изменение значения временного интервала приведет к повторному запуску оценки instance-existp, но изменение для интервала экземпляра или экземпляра, который не содержится в шаблоне в правиле, не приведет к повторному сопоставлению шаблонов.Если вы используете нетрадиционный элемент для проверки экземпляра, вы получите желаемое поведение:
(defclass classA (is-a USER)
(role concrete))
(defclass classB (is-a USER)
(role concrete)
(slot a (type INSTANCE)))
(definstances start
(a of classA)
(b of classB (a [a])))
(defrule classA-delete
?binstance <- (object (is-a classB) (a ?a))
(not (object (name ?a)))
=>
(send ?binstance delete))