Правила
В языке CLIPS правила имеют следующий формат:
(defrule <имя правила>
< необязательный комментарий >
< необязательное объявление >
< предпосылка_1 >
< предпосылка_т > =>
< действие_1 >
< предпосылка_п > )
Например:
(defrule chores
"Things to do on Sunday"
(salience 10)
(today is Sunday)
(weather is warm) =>
(assert (wash car))
(assert (chop wood) )
В этом примере Chores — произвольно выбранное имя правила. Предпосылки в условной части правила
(today is Sunday) (weather is warm)
сопоставляются затем интерпретатором с базой фактов, а действия, перечисленные в выполняемой части правила (она начинается после пары символов =>), вставят в базу два факта
(wash car) (chop wood)
в случае, если правило будет активизировано. Приведенный в тексте правила комментарий
"Things to do on Sunday"
"Что сделать в воскресенье"
поможет в дальнейшем вспомнить, чего ради это правило включено в программу. Выражение
(salience 10)
указывает на степень важности правила. Пусть, например, в программе имеется другое правило
(defrule fun
"Better things to do on Sunday"
(salience 100)
(today is Sunday)
(weather is warm) =>
(assert (drink beer))
(assert (play guitar)) )
Поскольку предпосылки обоих правил одинаковы, то при выполнении оговоренных условий они будут "конкурировать" за внимание интерпретатора. Предпочтение будет отдано правилу, у которого параметр salience имеет более высокое значение, в данном случае — правилу fun. Параметру salience может быть присвоено любое целочисленное значение в диапазоне [-10 000, 10 000]. Если параметр salience в определении правила опущен, ему по умолчанию присваивается значение 0.
Обычно в определении правила присутствуют и переменные. Если, например, правило
(defrule pick-a-chore
"Allocating chores to days"
(today is ?day)
(chore is ?job) =>
(assert (do ?job on ?day)) )