(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 присутствует в нем дважды. Использование группового символа для составного поля позволяет создавать гораздо более общие образцы, чем те, которые можно сформировать с помощью групповых символов для простого поля. Однако подобная общность приводит к тому, что процесс сопоставления образцов, использующих групповые символы, иногда занимает гораздо больше времени, чем аналогичный процесс с образцами, использующими только групповые символы для простых полей.
Переменные, связанные с простыми и составными полями
Групповые символы заменяют любые поля образца и могут принимать какие угодно значения этих полей. Значение поля может быть связано с переменными для последующего сопоставления, отображения и других действий. Это выполняется с помощью применения имени переменной следующим непосредственно после группового символа.
Таким образом, синтаксис ограничения, применяемого в образце, примет следующий вид: