Во время работы продукции может выключаться, насовсем или на один шаг, ранее включение - выключаться на один шаг или насовсем.
<операция управления>:: = rule_on(<параметры>)| rule_off(<параметры>)| rule_on(, r5)
Дополнительные возможности управления активностью продукций
![Операции управления активностью продукций](http://codingrus.ru/images/prolog/041.JPG)
Управление на уровне секций.
<секция>:: = section <имя>[<описатель>][<правила секции>]
{<множество продукций>}+
Правила секции имеют вид:
<правила секции>:: = <условие> → <действие>
<условие>:: = <условный элемент>│< условный элемент > & < условный элемент >…
В качестве условных элементов кроме обычных образцов (факта, сравнение, строки) можно использовать текущее состояние секций(какие продукции активны, какие нет), и предысторию процесса (какие продукции уже сработали успешно).
< условный элемент >:: = < ifactive_элемент > │ - активность
< условный элемент >:: = < ifused_элемент >│ - использование
< условный элемент >:: = < ifpat_элемент > - произведение
< действие >:: = exclude (< имя продукции >)│ include (< имя продукции >)
Правила секции может быть несколько, срабатывают они в порядке расположения.
Пример:
Section 9
ifused r12 &
if pat (< e1 > 15 )
→ include r13
Управление на уровне одной продукции.
< продукция >:: = rule < имя > [< правила разрешения конфликтов >] < левая часть >
< правая часть >
Правила разрешения используется тогда, когда в конфликтном множестве имеются несколько продукций. В какой - то степени компенсирует отсечение системы приоритетов, но в некоторых случаях обеспечит большие возможности, чем система приоритетов, давая возможность установить индивидуальные взаимные приоритеты.
<правила разрешения>:: = <условие> → <действие>
<условный элемент>:: = ││ - наличие
в конфликтном множестве определенных продукций.
<действие>:: = remove (<имя продукции>)│ - удалить из конфликтного множества
set (<имя продукции>) – оставить
Пример:
rule r5
ifwith < e2 &
ifused r5 &
ifpath (*:) → set r8
|