ВУЗ:
Составители:
Рубрика:
Для добавления новых правил в базу знаний CLIPS предоставляет специальный конструктор defrule. В общем виде син-
таксис данного конструктора можно представить следующим образом: 
(defrule 
<имя-правила> 
[<комментарии>] 
[<определение-свойства-правила>] 
<предпосылки>   ; левая часть правила 
=> 
<следствие>  ; правая часть правила 
) 
Имя правила должно быть значением типа symbol. В качестве имени правила нельзя использовать зарезервированные 
слова CLIPS, которые были перечислены ранее. Определение правила может содержать объявление свойств правила, кото-
рое следует непосредственно после имени правила и комментариев.  
В справочной системе и документации по CLIPS для обозначения предпосылок правила чаще всего используется тер-
мин "LHS of rule", а для обозначения следствия – "RHS of rule", поэтому в дальнейшем мы будем использовать аналогичную 
терминологию – левая и правая часть правила. 
Левая часть правила задается набором условных элементов, который обычно состоит из условий, примененных к неко-
торым образцам. Заданный набор образцов используется системой для сопоставления с имеющимися фактами и объектами. 
Все  условия  в  левой  части  правила  объединяются  с  помощью  неявного  логического  оператора and. Правая  часть  правила 
содержит список действий, выполняемых при активизации правила механизмом логического вывода. Для разделения правой 
и левой части правил используется символ →. Правило не имеет ограничений на количество условных элементов или дейст-
вий. Единственным ограничением является свободная память вашего компьютера. Действия правила выполняются последо-
вательно, но тогда и только тогда, когда все условные элементы в левой части этого правила удовлетворены. 
Если в левой части правила не указан ни один условный элемент, CLIPS автоматически подставляет условие образец initial-
fact или initial-object.  
После того как в систему добавлены все необходимые правила и приготовлены начальные списки фактов и объектов, 
CLIPS готов выполнять правила. В традиционных языках программирования точка входа, точка остановки и последователь-
ность вычислений явно определяются программистом. В CLIPS поток исполнения программы совершенно не требует ясного 
определения. Знания (правила) и данные (факты и  объекты) разделены, и механизм логического вывода, предоставляемый 
CLIPS, применяет данные к знаниям, формируя список применимых правил, после чего последовательно выполняет их. Этот 
процесс  называется  основным  циклом  выполнения  правил (basic cycle of rule execution). Рассмотрим  последовательность 
действий (шагов), выполняемых системой CLIPS в этом цикле в момент выполнения нашей программы: 
1.  Если был достигнут предел выполнения правил или не был установлен текущий фокус, выполнение прерывается. В 
противном случае для выполнения выбирается первое правила модуля, на котором был установлен фокус. Если в текущем 
плане выполнения нет удовлетворенных правил, то фокус перемещается по стеку фокусов и устанавливается на следующий 
модуль в списке. Если стек фокусов пуст, выполнение прекращается. Иначе шаг 1 выполняется еще один раз. 
2.  Выполнение действий, описанных в правой части выбранного правила. Использование функции return может менять 
положение  фокуса  в  стеке  фокусов.  Число  запусков  данного  правила  увеличивается  на  единицу  для  определения  предела 
выполнения правила.  
3.  В результате выполнения шага 2 некоторые правила могут быть активированы или дезактивированы. Активирован-
ные правила (т.е. правила, условия которых удовлетворяются в данный момент) помещаются в план решения задачи модуля, 
в котором они определены. Размещение в плане определяется приоритетом правила (salience) и текущей стратегией разре-
шения конфликтов (эти понятия будут описаны ниже). Дезактивированные правила удаляются из текущего плана решения 
задачи. Если для правила установлен режим просмотра активаций, то пользователь получит соответствующее информацион-
ное сообщение при каждой активации или дезактивации правила (режим просмотра активаций можно установить с помощью 
диалогового окна Watch options. Для этого выберите пункт Watch в меню Execution и установите флажок Activations). 
4.  Если установлен режим динамического приоритета (dynamic salience), то для всех правил из текущего плана реше-
ния задачи вычисляются новые значения приоритета. После этого цикл повторяется с шага 1. 
Свойства правил  позволяют  задавать  характеристики правил до  описания  левой  части  правила. Для задания  свойства 
правила используется ключевое слово declare. Однако правило может иметь только одно определение свойства, заданное с 
помощью declare. 
<определение-свойства-правила> :: = (declare <свойство-правила>) 
<свойство-правила> :: = (salience <целочисленное выражение> ) | (auto-focus TRUE | FALSE) 
Свойство правила salience позволяет пользователю  назначать приоритет для  своих правил. Объявляемый приоритет 
должен быть выражением, имеющим целочисленное значение из диапазона от –10 000 до +10 000. Выражение, представ-
ляющее  приоритет  правила,  может  использовать  глобальные  переменные  и  функции. Однако  старайтесь  не  указывать  в 
этом выражении функций, имеющих побочное действие. В случае, если приоритет правила явно не задан, ему присваива-
ется значение по умолчанию, т.е. 0. 
Значение приоритета может быть вычислено в одном из трех случаев: при добавлении нового правила, при активации 
правила и на каждом шаге основного цикла выполнения правил. Два последних варианта называются динамическим приори-
тетом (dynamic salience). По умолчанию значение приоритета вычисляется только во время добавления правила. Для измене-
ния этой установки можно использовать команду set-salience-evaluation. 
Каждый метод вычисления приоритета содержит в себе предыдущий (т.е. если приоритет вычисляется на каждом шаге 
основного цикла выполнения правил, то он вычисляется и при активации правила, а также при его добавлении в систему). 
Страницы
- « первая
 - ‹ предыдущая
 - …
 - 5
 - 6
 - 7
 - 8
 - 9
 - …
 - следующая ›
 - последняя »
 
