Описания задач в системе PROUST состоят из указаний целей программирования и множества объектов данных. Цели программирования представляют собой те принципиальные требования, которые должны быть удовлетворены, а множества объектов данных—те данные, с которыми должна работать программа.
В качестве первого шага при переводе формулировки задачи с естественного (английского) языка на язык описания задач системы PROUST - производится выявление различных целей, которые упоминаются в исходной формулировке задачи.
Решения задачи вычисления среднего применяются к некоторой последовательности входных данных. Очередной элемент этой последовательности, поступающий на вход программы, будем называть именем Следующий. Тогда из формулировки задачи можно извлечь следующую совокупность целей:
- Прочесть последовательные значения переменной Следующий и остановиться по прочтении сигнального значения, т. е. 99999.
- Убедиться, что не соблюдается условие Следующий <=0 (В системе PROUST комбинация <=воспринимастся как математический знак ≤ и как двуместный предикат «меньше или равно»).
- Вычислить среднее арифметическое из всех значений переменной Следующий.
- Выдать на печать среднее арифметическое.
Теперь мы должны использовать эти цели при построении описания задачи для системы PROUST. Каждый объект данных, упоминаемый в целях, объявляется и получает имя. В рамках такого описания записывается каждая цель, извлеченная из формулировки задачи. Результирующее описание задачи представлено в табл. 1.
Таблица 1. Перевод задачи вычисления среднего арифметического на язык описания задач, используемый в системе PROUST
((Определить-Программу Среднее)
(Определить-Объект ?Следующий)
(Определить-Объект ?Сигнальный Значение 99999)
(Определить-Цель
(Сигнально-Контролируемый-Вход?Следующий ?Сигнальный»
(Определить-Цель
(Допустимость-Входа ?Следующий
(< = ?Следующий 0)))
(Определить-Цель
(Выход(Среднее (?Следующий))))
Как и все структуры данных, обсуждаемые в настоящей работе, описания задач даются в форме списков, а каждое утверждение и каждое выражение заключается в круглые скобки. Оператор Определить-Программу используется для задания имени программы, оператор Определить-Объект— для задания имени объекта, а оператор Определить-Цель задает цель.
Перед именами объектов стоят вопросительные знаки. В описании задачи вычисления среднего даны определения для двух объектов, а именно: ?Следующий и ?Сигнальный. Такое применение вопросительного знака часто встречается в программах систем искусственного интеллекта; оно указывает на то, что данная переменная не является самостоятельной величиной, а служит лишь некоторым параметром, вместо которого делается подстановка в ходе использования структуры данных. Например, вместо объекта ?Следующий для входных данных будет подставляться имя той переменной на языке Паскаль, которую студент избрал для хранения входного значения. Объект ?Сигнальный имеет значение 99999, поэтому всюду, где в описании задачи встречается ?Сигнальный, вместо него можно подставлять 99999.
Объекты могут иметь как постоянное, так и переменное значение. В нашем случае объект ?Сигнальный является постоянной величиной, значение которой равно 99999, а объект ?Следующий—переменной. В универсальном языке описания задач системы PROUST объекты могут иметь самые разнообразные закрепляемые за ними свойства, которые в нашем простом примере не используются, и поэтому мы на них не останавливаемся.
Целевые утверждения состоят из наименования типа цели и списка аргументов. Так, в записи (Среднее ?Следующий) Среднее представляет тип цели (т. е. вычисление среднего), а ?Следующий — аргумент. Это выражение означает, что программе предписывается вычислить среднее арифметическое величин ?Следующий.
Аргументы в целевых выражениях могут встречаться в различной форме: объектов, предикатов и даже других целевых выражений. В выражении (Допустимость-Входа? Следующий (<= ?Следующий 0)) первый аргумент является объектом (?Следующий), а второй — предикатом проверки выполнения неравенства ?Следующий <=0. В языке Лисп имена функций и операторов помещаются перед их аргументами, поэтому символ <= предшествует объекту ?Следующий и 0 в приведенном выражении. Если встречаются вложенные друг в друга цели, как в (Выход (Среднее ?Следующий)), то внешняя цель относится к результату достижения внутренней цели. Таким образом, приведенная цель требует, чтобы на выходе программы было среднее из величин объекта ?Следующий.
В рассматриваемом примере описания, которые дает система PROUST на языке описания задач, довольно хорошо соответствуют исходным формулировкам на естественном (английском) языке. Полученные описания задач говорят о том, что программа должна делать, но не о том, как это будет достигаться. Поэтому система PROUST должна проанализировать каждую индивидуальную программу и установить, как в ней планируется выполнить требования, поставленные в задаче.