Определение 6.15. Синтаксис образцов объектов

<образец объекта>::= (object <атрибуты-ограничения>)

<атрибуты-ограничения>::= (is-a <ограничение>)|

(name <ограничение>)|

(slot <ограничение>)

Ограничение is-a (является) используется для определения ограничений класса, таких как "Является ли этот объект экземпляром заданного класса?". Ограничение is-a также определяет, является ли объект экземпляром клас­са, который является наследником класса, заданного в ограничении, в слу­чае если это не будет явно запрещено образцом.

Ограничение name используется для определения конкретного объекта с за­данным именем. Имя, задаваемое в данном ограничении, должно быть зна­чением типа instance-name, а не значением типа symbol, как обычно. Огра­ничения для составных полей (такие как $?) не могут использоваться с ограничениями is-a и name. Эти ограничения применяются в работе со слотами объектов так же, как и при работе со слотами шаблонов. Как и в случае образцов для шаблонов, имена слотов для образца объекта должны быть значениями типа symbol.

Приведем несколько примеров использования образцов объектов.

Пример 6.22. Использование образцов объектов

(defrule example-1

(object (is-a MyObjl | MyObj2))

=>)

(defrule example-2

(object (is-a?x))

(object (is-a ~?x) }

=>)

(defrule example-3

(object (width?x&:(>?x 20)))

=>)

(defrule example-4

(object (width?x) (height?x))

=>)

Первое правило удовлетворяет любой объект класса MyObj1 или MyObj2. Второе правило активируется любой парой объектов, принадлежащей разным классам. Третье правило выполняется в случае, если будет найден объект активного класса, содержащий активный слот width, значение которого больше 20. Последний приведенный пример удовлетворяется любым объек­том активного класса, содержащим активные слоты width и height, значе­ния которых должны быть равны.

Адрес образца

Некоторые действия в правой части правил, такие как retract и unmake-instance, оперируют с фактами или объектами, участвующими в левой час­ти. Для того чтобы определить, какой факт или объект будет изменяться, необходимо присвоить переменной адрес конкретного факта или объекта. Присваивание адресов происходит в левой части правила и полученное значение называется адресом образца (pattern-address).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



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