Prev | Up | Next | Back | Forward
TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help


5.5 Loop Statements

(1)
A loop_statement includes a sequence_of_statements that is to be executed repeatedly, zero or more times.
Syntax
(2)
       loop_statement ::=
          [loop_statement_identifier:]
             [iteration_scheme] loop
                sequence_of_statements
              end loop [loop_identifier];
(3)
       iteration_scheme ::= while condition
          | for loop_parameter_specification
(4)
       loop_parameter_specification ::=
          defining_identifier in [reverse] discrete_subtype_definition
(5)
Static Semantics
(6)
A loop_parameter_specification declares a loop parameter, which is an object whose subtype is that defined by the discrete_subtype_definition.
Dynamic Semantics
(7)
For the execution of a loop_statement, the sequence_of_statements is executed repeatedly, zero or more times, until the loop_statement is complete. The loop_statement is complete when a transfer of control occurs that transfers control out of the loop, or, in the case of an iteration_scheme, as specified below.
(8)
For the execution of a loop_statement with a while iteration_scheme, the condition is evaluated before each execution of the sequence_of_statements; if the value of the condition is True, the sequence_of_statements is executed; if False, the execution of the loop_statement is complete.
(9)
For the execution of a loop_statement with a for iteration_scheme, the loop_parameter_specification is first elaborated. This elaboration creates the loop parameter and elaborates the discrete_subtype_definition. If the discrete_subtype_definition defines a subtype with a null range, the execution of the loop_statement is complete. Otherwise, the sequence_of_statements is executed once for each value of the discrete subtype defined by the discrete_subtype_definition (or until the loop is left as a consequence of a transfer of control). Prior to each such iteration, the corresponding value of the discrete subtype is assigned to the loop parameter. These values are assigned in increasing order unless the reserved word reverse is present, in which case the values are assigned in decreasing order.

(10)
(11)
(12)
(13)
          for J in reverse 1 ..  0
          for J in 0 .. 1
Examples
(14)
Example of a loop statement without an iteration scheme:
(15)
       loop
          Get(Current_Character);
          exit when Current_Character = '*';
       end loop;
(16)
Example of a loop statement with a while iteration scheme:
(17)
       while Bid(N).Price < Cut_Off.Price loop
          Record_Bid(Bid(N).Price);
          N := N + 1;
       end loop;
(18)
Example of a loop statement with a for iteration scheme:
(19)
       for J in Buffer'Range loop     --  works even with a null range
          if Buffer(J) /= Space then
             Put(Buffer(J));
          end if;
       end loop;
(20)
Example of a loop statement with a name:
(21)
       Summation:
          while Next /= Head loop       -- see 3.10.1
             Sum  := Sum + Next.Value;
             Next := Next.Succ;
          end loop Summation;


Prev | Up | Next | Back | Forward
TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

Ada WWW Home -- Email comments, additions, corrections, gripes, kudos, etc. to:

Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12