Иллюстрированный самоучитель по введению в экспертные системы

Правила

Обычно в определении правила присутствуют и переменные. Если, например, правило:

(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)

Если за префиксами ? и $? не следует имя переменной, они рассматриваются как универсальные символы подстановки, которым соответственно может быть сопоставлен любой элемент или сегмент списка.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.