Определение 6.7. Синтаксис ограничений для шаблона
(<имя-шаблона > (<имя-слота-1> <ограничение-1>)
…
(<имя-слота-n> <ограничение-n>))
В качестве примера можно привести следующее правило:
Пример 6.8. Правило Find-data
(defrule Find-data
(data ? blue red $?) =>)
В нашем списке фактов присутствуют два факта, подходящие заданному шаблону и способные активировать данное правило:
Пример 6.9. Факты, активирующие правило Find-data
(data 1 blue red)
(data 1 blue red 6.9))
Рассмотрим еще одно правило:
Пример 6.10. Правило match-all-persons
(defrule match-all-persons
(person)
=>)
Поскольку person является шаблоном, а в образце данного правила не определен ни один слот шаблона, CLIPS автоматически поставит в соответствие каждому простому слоту групповой символ для простого поля, а составному слоту — символ для составного. Таким образом, правило преобразуется в следующее:
Пример 6.11. Преобразованное правило match-all-persons
(defrule match-all-persons
(person
(name ?)
(age ?)
(friends $?))
=>)
Это правило будут активировать все факты шаблона person.
Групповые символы для составного поля можно комбинировать с символьными ограничениями, что приводит к получению более мощных возможностей сопоставления образцов. Образец, который сопоставляется со всеми фактами, имеющими значение yellow в любом поле (включая первый), может быть записан так:
Пример 6.12. Образец со значением yellow в любом поле
(data $? YELLOW $?)
Вот несколько фактов, соответствующих этому образцу:
Пример 6.13. Факты со значением yellow в любом поле
(data YELLOW blue red green)
(data YELLOW red)
(data red YELLOW)
(data YELLOW)
(data YELLOW data YELLOW)
Последний факт будет соответствовать образцу дважды, т. к. yellow присутствует в нем дважды. Использование группового символа для составного поля позволяет создавать гораздо более общие образцы, чем те, которые можно сформировать с помощью групповых символов для простого поля. Однако подобная общность приводит к тому, что процесс сопоставления образцов, использующих групповые символы, иногда занимает гораздо больше времени, чем аналогичный процесс с образцами, использующими только групповые символы для простых полей.