Исполняемые утверждения БЗ

 

Основу исполняемых утверждений БЗ составляют правила и процедуры. Кроме того, есть формулы, функции, действия и т.п. Правила в G2 имеют традиционный вид: условие (антецедент) и заключение (консеквент). Кроме if-правила: условие ("if <логическое выражение>") и заключение ("then <действия>") используются еще 4 типа правил: initially, unconditionally, when и whenever.

Способы применения каждого правила определяются его синтаксисом:

<правило> ::= {<префикс for>

{<правило if> | <правило unconditional1у>

<правило when> | <правило whenever>]

<правило initially>]

<префикс fоr> ::= for {any | the }<item> ...

<правило if> ::= if <логическое выражение> then<список действий> <правило unconditionally> ::=unconditionally<список действий>

<правило when> ::= when <логическое выражение>

then <список действий>

<правило whenever> ::= whenever <описание события>

|ог<описание события>

|and when<логическое выражение>

<правило initially> ::= initially

|if<логическое выражение> then <список действий>

Каждый из типов правил может быть как общим, т.е. относящимся ко всему классу, так и специализированным, относящимся к конкретным экземплярам класса. Возможность представлять знания в виде общих, а не только конкретных правил, обеспечивает следующие преимущества:

- минимизируется избыточность БЗ;

- упрощается наполнение БЗ и ее сопровождение;

- минимизируются ошибки при отладке БЗ;

- способствует повторной используемости знаний (так как общие правила запоминаются в библиотеке G2 и могут использоваться в подобных приложениях).

Несмотря на то, что продукционные правила обеспечивают достаточную гибкость для описания реакций системы на изменения окружающего мира, в некоторых случаях, когда необходимо выполнить жесткую последовательность действий (например, запуск или остановку комплекса оборудования), более предпочтительным является процедурный подход. Язык программирования, используемый в G2 для представления процедурных знаний, является достаточно близким родственником Паскаля. Кроме стандартных управляющих конструкций язык расширен элементами, учитывающими работу процедуры в реальном времени: ожидание наступления событий, разрешение другим задачам прерывать выполнение данной процедуры, директивы, задающие последовательное или параллельное выполнение операторов. Еще одна интересная особенность языка- итераторы, позволяющие организовать цикл над множеством экземпляров класса. Перечисленные свойства языка позволяют системе одновременно выполнять множество различных процедур или множество копий одной и той же процедуры для множества различных объектов.