(defrule Create
?ins<-(object (is-a A | В))
=>
(printout t "Create " (instance-name?ins) crlf))
(defrule Foo-Access
?ins<-(object (is-a A │ B) (foo?))
=>
(printout t "Foo-Access " (instance-name?ins) crlf))
С помощью первого правила фактически будет получен список всех объектов классов а или B. Второе правило будет выводить имена объектов классов а или в, имеющих хоть какое-то значение слота foo (если этот слот может принимать участие в процессе сопоставления образцов). Создайте по одному экземпляру каждого класса и запустите программу. После этого измените значения слотов и попробуйте запустить программу еще раз. Вы должны получить результат, приведенный на рис. 11.9.
Обратите внимание, что только второе сообщение send вызовет изменение плана решения задачи (это хорошо видно с помощью окна Agenda Window). Это происходит потому, что слот foo класса а не является активным в процессе сопоставления образцов.

Рис. 11.9. Работа правил, использующих объекты






