Spec-Zone.ru › Ada 95
Справочник по Ada 95

5.5 Циклы

Оператор цикла включает последовательность операторов, которые должны выполняться многократно, ноль или более раз.

Синтаксис

loop_statement ::=
[идентификатор_цикла:]
[схема_итерации] loop
последовательность_операторов
end loop [идентификатор_цикла];
схема_итерации ::= while условие
| for указание_параметра_цикла
указание_параметра_цикла ::=
идентификатор in [reverse] определение_подтипа_дискретного_типа
Если оператор цикла имеет идентификатор_цикла, то идентификатор должен быть повторен после end loop; в противном случае, идентификатора после end loop быть не должно.

Статическая семантика

Указание параметра цикла объявляет параметр цикла, который является объектом, подтип которого определяется определением_подтипа_дискретного_типа.

Динамическая семантика

Для выполнения оператора цикла, последовательность операторов выполняется многократно, ноль или более раз, до тех пор, пока оператор цикла не будет завершен. Оператор цикла завершен, когда происходит передача управления, которая выходит из цикла, или, в случае схемы итерации, как указано ниже.
Для выполнения оператора цикла со схемой итерации while, условие оценивается перед каждым выполнением последовательности операторов; если значение условия истинно, последовательность операторов выполняется; если ложно, выполнение оператора цикла завершено.
Для выполнения оператора цикла со схемой итерации for, указание параметра цикла сначала обрабатывается. Эта обработка создаёт параметр цикла и обрабатывает определение подтипа дискретного типа. Если определение подтипа дискретного типа определяет подтип с пустым диапазоном, выполнение оператора цикла завершается. В противном случае, последовательность операторов выполняется один раз для каждого значения дискретного подтипа, определённого определением подтипа дискретного типа (или пока цикл не будет покинут в результате передачи управления). Перед каждой такой итерацией соответствующее значение дискретного подтипа присваивается параметру цикла. Эти значения присваиваются в возрастающем порядке, если зарезервированное слово reverse не присутствует, в противном случае значения присваиваются в убывающем порядке.
ПРИМЕЧАНИЯ
6 Параметр цикла является константой; его нельзя обновлять внутри последовательности операторов цикла (см. 3.3).
7 Объявление объекта не должно быть предоставлено для параметра цикла, так как параметр цикла автоматически объявляется указанием параметра цикла. Область действия параметра цикла простирается от указания параметра цикла до конца оператора цикла, и правила видимости таковы, что параметр цикла виден только внутри последовательности операторов цикла.
8 Определение подтипа дискретного типа цикла for обрабатывается только один раз. Использование зарезервированного слова reverse не изменяет определённый дискретный подтип, поэтому следующие схемы итерации не эквивалентны; первая имеет пустой диапазон.
for J in reverse 1 .. 0
for J in 0 .. 1

Примеры

Пример оператора цикла без схемы итерации:
loop
Get(Current_Character);
exit when Current_Character = '*';
end loop;
Пример оператора цикла со схемой итерации while:
while Bid(N).Price < Cut_Off.Price loop
Record_Bid(Bid(N).Price);
N := N + 1;
end loop;
Пример оператора цикла со схемой итерации for:
for J in Buffer'Range loop -- работает даже с пустым диапазоном
if Buffer(J) /= Space then
Put(Buffer(J));
end if;
end loop;
Пример оператора цикла с именем:
Summation:
while Next /= Head loop -- см. 3.10.1
Sum := Sum + Next.Value;
Next := Next.Succ;
end loop Summation;


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API