Правила
Обычно в определении правила присутствуют и переменные. Если, например, правило:
(defrule pick-a-chore "Allocating chores to days" (today is?day) (chore is?job) › (assert (do?job on?day)))
Будет сопоставлено с фактами:
(today is Sunday) (chore is carwash)
То в случае активизации оно включит в базу новый факт:
(do carwash on Sunday).
Аналогично, правило:
(defrule drop-a-chore "Allocating chores to days" (today is?day) ?chore ← (do?job on?day) › (retract?chore))
Отменит выполнение работ по дому (a chore). Обратите внимание на то, что оба экземпляра переменной ?day должны получить одно и то же значение. Переменная ?chore в результате сопоставления должна получить ссылку на факт, который мы собираемся исключить из базы.
Таким образом, если это правило будет сопоставлено с базой фактов, в которой содержатся:
(today is Sunday) (do carwash on Sunday)
То при активизации правила из базы будет удален факт:
(do carwash on Sunday)
С подробностями выполнения процесса сопоставления в интерпретаторе CLIPS вы сможете познакомиться в Руководстве пользователя, а здесь только отметим, что факт:
(do carwash on Sunday)
Будет сопоставлен с любым из представленных ниже образцов:
(do?? Sunday) (do? on?) (do? on?when) (do $?) (do $? Sunday) (do?chore $?when)
Учтите, что префикс $? является признаком сегментной переменной, которая будет связана с сегментом списка. Например, в приведенном выше примере переменная $?when будет связана с:
(on Sunday)
Если за префиксами ? и $? не следует имя переменной, они рассматриваются как универсальные символы подстановки, которым соответственно может быть сопоставлен любой элемент или сегмент списка.