566 Приложение. Обзоры языков
Строки 20–22. Итерационный процесс управляется оператором loop. Существу
ет несколько его вариантов. В данной подпрограмме используется вариант цикла
for, который повторно выполняет тело цикла, пока переменная цикла i принимает
последовательные значения от 1 до v.sz. Заметим, что переменная i не была объяв
лена, но она неявно объявляется как локальная переменная, действующая внутри
оператора цикла.
Строки 26–30. Здесь определяется подпрограмма setval. Формальный пара
метр arg является только входным и аналогичен параметру в языке Pascal, переда
ваемому по значению.
Строка 31. Ключевое слово with указывает, что в следующем далее компоненте
языка Ada должен использоваться стандартный пакет Text_IO. Все объекты, опре
деленные в Text_IO, в качестве префикса содержат имя пакета. Поскольку Text_IO
является стандартным пакетом вводавывода, среди прочих в нем определены функ
ции Text_IO.get и Text_IO.put.
Команда use специфицирует, чтобы компилятор Ada первым просматривал па
кет Text_IO для определения области видимости объектов. Это позволяет в про
грамме использовать, например, имя put вместо полного имени Text_IO.put.
Строка 32. Пакет ArrayCalc также будет использоваться в следующем далее ком
поненте Ada.
Строка 33. Программа, написанная на языке Ada, состоит из главной процеду
ры, которая может вызывать подпрограммы из различных пакетов. В этом приме
ре главная процедура называется main.
Строка 36. Для чтения данных в пакете Text_IO определена функция get. Это
перегруженная функция, так что аргумент может быть целой переменной (в дан
ном примере k), строковой переменной или парой (файл, объект), позволяющей
считывать данные из файлов. Поскольку для каждого случая набор аргументов
уникален, то компилятор сам знает, какую функцию get следует вызывать.
Строка 39. Функция get считывает данные в целую переменную m. Функция
put, определенная в пакете Text_IO, выводит на печать значение своего аргумента.
Необязательный второй аргумент задает ширину поля вывода для печати значе
ния объекта. Так, значение переменной m печатается в виде трех символов (с пред
шествующими пробелами для чисел, меньших 100).
Строка 40. Вызывается процедура setval пакета ArrayCalc, которой передается
фактический параметр m. Поскольку в строке 32 имеется команда use, то нет не
обходимости в задании полного имени процедуры ArrayCalc.setval.
Строка 42. Функция new_line, определенная в пакете Text_IO, выводит на пе
чать символ конца строки. Функция put печатает SUM =. Обратите внимание на то,
что этот вызов функции отличается от вызова функции put в строке 39, поскольку
данная функция печатает строку, а функция put в строке 39 печатает целое число.
Реализация перегрузки функций определяет, какую функцию следует вызвать.
Строка 43. Здесь употребляется полностью уточненное имя. Изза того, что в стро
ке 32 использовалась команда use, вместо этого имени можно было бы написать про
сто sum. Полностью уточненное имя необходимо использовать, если одно и то же имя
функции используется в нескольких пакетах внутри области видимости текущего
оператора и при разрешении перегрузки они окажутся неразличимы. В данном случае
число, возвращаемое функцией sum, печатается в виде четырех выходных символов.