Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_по_jason_(итог).doc
Скачиваний:
79
Добавлен:
21.03.2016
Размер:
1.79 Mб
Скачать

Имя события : Контекстные ограничения

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

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

Рассмотрим синтаксис описания планов на примерах.

Пример №1

Напишем классическую программу «Hello World».

started.

+started <- .print("Hello World!"). // My first program

Здесь «started.» - начальное убеждение. При запуске программы по всем начальным убеждениям и целям генерируются события добавления, приводящие к активации планов.

«+started» - отслеживаемое нашим единственным планом событие.

Контекстные ограничения в данном примере отсутствуют.

Тело плана состоит из одной строки – это «.print("Hello World!")» - вызов внутренней функции среды Jason, предназначенной для печати текстовых сообщений в специальном окне.

Обратите внимание, что вызов внутренних функций всегда начинается с точки, стоящей перед именем функции (перечень внутренних функций смотри в прил.1).

В конце плана, после символов «//» даны комментарии. Если комментарии превышают по объему одну строчку, то соответствующих фрагмент можно ограничить двумя парами символов «/*» и «*/»

Пример №2

Допустим, требуется вычислить факториал числа 5.

fact(0,1).

+fact(X,Y): X < 5

<- +fact(X+1, (X+1)*Y).

+fact(X,Y): X == 5

<- .print("fact 5 == ", Y).

Теперь у нас два разных плана, которые активируются при возникновении одного и того же убеждения fact(X,Y), но в разных контекстных условиях - «X < 5» и «X == 5». В данном примере следует обратить внимание на операцию добавления нового убеждения, использованную в теле первого плана. Эта операция обозначается символом «+» перед именем добавляемого убеждения. Ее выполнение на следующем цикле работы агента приведет к возникновению одноименного события, которое активирует один из планов.

Также при написании планов могут быть использованы операции удаления убеждений (обозначается символом «-»), и замены убеждений (обозначается комбинацией «-+»).

В примере показано рекурсивное выполнение планов по событиям добавления новых убеждений пока соблюдаются контекстные ограничения.

Первый план можно перевести на русский язык следующим образом: «Если возникло убеждение, что факториал X равен Y и выполняется ограничение, что X<5, то следует добавить в базу убеждений тот факт, что факториал X+1 равен (X+1)*Y».

Обратите внимание, что событие «+fact(X,Y)» является как бы шаблоном для описания множества событий, возникающих, если переменным X и Y приписать конкретные значения.

Программа будет работать следующим образом. Благодаря наличию начального убеждения «fact(0,1).» и первому плану, у агента будут последовательно формироваться следующие убеждения:

fact(1,1).

fact(2,2).

fact(3,6).

fact(4,24).

fact(5,120).

При возникновении последнего убеждения первый план уже не активируется, зато активируется второй план, который выведет результат вычисления факториала.

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