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

Пример №4(d)

А теперь спровоцируем ошибку во втором плане предыдущего примера, чтобы этот план не смог выполниться. Поступим уже показанным способом – добавим в план попытку считывания несуществующего убеждения «d(F)».

a(10).

b(15).

!start.

+!start <- ?a(X);

?b(Y);

?c(Z);

.print("Summa = ",X+Y+Z).

+?c(Z) <- ?a(X);

?b(Y);

?d(F);

Z=X+Y+F.

-?c(Z) <-.print("Error computing Z per d"); Z=X+Y.

Теперь программа не сможет подсчитать сумму через обработку события «+?c(Z)». Однако это еще не повод отчаиваться, поскольку генерируется событие отказа от достижения цели-проверки «-?c(Z)», и мы все еще имеем возможность обработать это исключение в качестве последней попытки повлиять на значение Z. Что и было сделано в третьем плане примера. В результате программа опять пришла к верному результату, но информировала нас, что не смогла получить его через убеждение «d(F)».

Пример №4(e)

Вернемся еще раз к примеру №4(a). Предположим, что нас не интересуют способы вычисления «c(Z)», если его нет в базе убеждений. Тогда единственное, что мы можем еще обработать,- это событие отказа от изначальной достигаемой цели «!start».

a(10).

b(15).

!start.

+!start <- ?a(X);

?b(Y);

?c(Z);

.print("Summa = ",X+Y+Z).

-!start <-.print("Forbidden plan!").

Не найдя всех выше перечисленных способов определить «c(Z)», интерпретатор отказывается от достижения цели «!start» и мы получаем сообщение "Forbidden plan!".

4.4.6 Операторы

В табл. 3 приведены элементарные операторы, употребляемые в планах для вычисления выражений.

Таблица 3

оператор

Назначение

+

Сложение (не путать событием добавления)

-

Вычитание (не путать событием удаления)

*

Умножение

/

Деление

mod

Получение остатка от деления

div

Целочисленное деление

|

Списковый оператор

=

Присвоение

==

Равенство

\==

Не равенство

>

Больше

<

Меньше

>=

Больше или равно

<=

Меньше или равно

=..

Разложение литерала на составляющие

Последний из перечисленных операторов достаточно специфичен, хотя и имеет аналог в Прологе. Он позволяет разобрать предикатную запись на предикатный символ, список термов и список аннотаций. Случаи его применения не рассматриваются в данном пособии. Интересующиеся могут обратиться к первоисточнику [2, стр. 55].

4.4.7 Аннотации

Одна из важных особенностей системы Jason – это работа с аннотациями. С помощью аннотаций можно описывать свойства убеждений и планов как объектов манипуляций. Аннотации делают программу более изящной и позволяют более гибко организовать работу интерпретатора. Однако вся мощь их использования раскрывается в сочетании с Java, поэтому желающим узнать по этому вопросу больше мы рекомендуем обратиться к первоисточнику [2, 34]. В данном пособии мы рассмотрим лишь некоторые варианты использования предопределенных аннотаций.

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

Выражение аннотации состоит из оператора и его параметра.