(deftemplate foo (multislot x (cardinality?VARIABLE 3))
(deftemplate bar (multislot у (cardinality?VARIABLE 2))
(deftemplate woz (multislot z (cardinality 7?VARIABLE))
(defrule error
(foo (x $?x))
(bar (y $?y))
(woz (z $?x $?y)) =>)
Результат выполнения этих команд приведен на рис. 13.3.
В данном случае ошибка возникает по следующим причинам. Составная переменная?х, используемая в первом образце правила, может содержать максимум 3 поля (согласно заданным ограничениям мощности). Составная переменная?у из второго образца правила может содержать максимум 2 поля. Объединение обеих переменных дает составную переменную, содержащую максимум 5 полей. Поскольку слот z в третьем образце правила error имеет минимальную мощность, равную 7, переменные?х и?у не могут удовлетворять ограничениям мощности для слота z, что вызывает соответствующую ошибку.
Рис. 13.3. Еще одно ошибочное применение ограничений
Введите в CLIPS следующие команды: