Пример 11.24. Правила, использующие объекты

(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. Работа правил, использующих объекты




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