File: AA-5-5.html

package info (click to toggle)
ada-reference-manual 20021112web-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny, sarge
  • size: 18,652 kB
  • ctags: 8,921
  • sloc: makefile: 52; sh: 20
file content (214 lines) | stat: -rw-r--r-- 16,631 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Loop Statements</TITLE>
    <META NAME="Author" CONTENT="JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor">
    <META NAME="GENERATOR" CONTENT="Arm_Form.Exe, Ada Reference Manual generator">
    <STYLE type="text/css">
    DIV.paranum {position: absolute; font-family: Arial, Helvetica, sans-serif; left: 0.5 em; top: auto}
    TT {font-family: "Courier New", monospace}
    DT {display: compact}
    DIV.Normal {font-family: "Times New Roman", Times, serif; margin-bottom: 0.6em}
    DIV.Wide {font-family: "Times New Roman", Times, serif; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Annotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.WideAnnotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Index {font-family: "Times New Roman", Times, serif}
    DIV.SyntaxSummary {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Notes {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.NotesHeader {font-family: "Times New Roman", Times, serif; margin-left: 2.0em}
    DIV.SyntaxIndented {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Indented {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-bottom: 0.6em}
    DIV.CodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.SmallIndented {font-family: "Times New Roman", Times, serif; margin-left:  10.0em; margin-bottom: 0.6em}
    DIV.SmallCodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.Examples {font-family: "Courier New", monospace; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.SmallExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 7.5em; margin-bottom: 0.6em}
    DIV.IndentedExamples {font-family: "Courier New", monospace; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.SmallIndentedExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left:  15.0em; margin-bottom: 0.6em}
    UL.Bulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.IndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SyntaxIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.Hanging {font-family: "Times New Roman", Times, serif; margin-top: 0em; margin-bottom: 0.6em}
    DD.Hanging {margin-left: 6.0em}
    DL.IndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.IndentedHanging {margin-left: 2.0em}
    DL.HangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.HangingInBulleted {margin-left: 4.0em}
    DL.SmallHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallHanging {margin-left: 7.5em}
    DL.SmallIndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallIndentedHanging {margin-left: 2.0em}
    DL.SmallHangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallHangingInBulleted {margin-left: 5.0em}
    DL.Enumerated {font-family: "Times New Roman", Times, serif; margin-right: 0.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.Enumerated {margin-left: 2.0em}
    DL.SmallEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallEnumerated {margin-left: 2.5em}
    DL.NestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.SmallNestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    </STYLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFF0" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-5-4.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-5-6.html">Next</A></P>
<HR>
<H1> 5.5 Loop Statements</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[A <FONT FACE="Arial, Helvetica">loop_statement</FONT>
includes a <FONT FACE="Arial, Helvetica">sequence_of_statements</FONT>
that is to be executed repeatedly, zero or more times.] </DIV>

<H4 ALIGN=CENTER>Syntax</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">loop_statement<A NAME="I2965"></A>
::= </FONT><BR>
&nbsp;&nbsp;&nbsp;[<I>loop_</I><A NAME="I2966"></A><FONT FACE="Arial, Helvetica">statement_identifier</FONT>:]<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<A NAME="I2967"></A><FONT FACE="Arial, Helvetica">iteration_scheme</FONT>]&nbsp;<B>loop</B><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I2968"></A><FONT FACE="Arial, Helvetica">sequence_of_statements</FONT><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>end</B>&nbsp;<B>loop</B>&nbsp;[<I>loop_</I><A NAME="I2969"></A><FONT FACE="Arial, Helvetica">identifier</FONT>];</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">iteration_scheme<A NAME="I2970"></A>
::= </FONT><B>while</B>&nbsp;<A NAME="I2971"></A><FONT FACE="Arial, Helvetica">condition</FONT><BR>
&nbsp;&nbsp;&nbsp;|&nbsp;<B>for</B>&nbsp;<A NAME="I2972"></A><FONT FACE="Arial, Helvetica">loop_parameter_specification</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">loop_parameter_specification<A NAME="I2973"></A>
::= </FONT><BR>
&nbsp;&nbsp;&nbsp;<A NAME="I2974"></A><FONT FACE="Arial, Helvetica">defining_identifier</FONT>&nbsp;<B>in</B>&nbsp;[<B>reverse</B>]&nbsp;<A NAME="I2975"></A><FONT FACE="Arial, Helvetica">discrete_subtype_definition</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="SyntaxIndented">If a <FONT FACE="Arial, Helvetica">loop_statement</FONT>
has a <I>loop_</I><FONT FACE="Arial, Helvetica">statement_identifier</FONT>,
then the <FONT FACE="Arial, Helvetica">identifier</FONT> shall be repeated
after the <B>end loop</B>; otherwise, there shall not be an <FONT FACE="Arial, Helvetica">identifier</FONT>
after the <B>end loop</B>. </DIV>

<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2976"></A>A <FONT FACE="Arial, Helvetica">loop_parameter_specification</FONT>
declares a <I>loop parameter</I>, which is an object whose subtype is
that defined by the <FONT FACE="Arial, Helvetica">discrete_subtype_definition</FONT>.
<A NAME="I2977"></A></DIV>

<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2978"></A>For the execution of a <FONT FACE="Arial, Helvetica">loop_statement</FONT>,
the <FONT FACE="Arial, Helvetica">sequence_of_statements</FONT> is executed
repeatedly, zero or more times, until the <FONT FACE="Arial, Helvetica">loop_statement</FONT>
is complete. The <FONT FACE="Arial, Helvetica">loop_statement</FONT>
is complete when a transfer of control occurs that transfers control
out of the loop, or, in the case of an <FONT FACE="Arial, Helvetica">iteration_scheme</FONT>,
as specified below.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2979"></A>For the execution of a <FONT FACE="Arial, Helvetica">loop_statement</FONT>
with a <B>while</B> <FONT FACE="Arial, Helvetica">iteration_scheme</FONT>,
the condition is evaluated before each execution of the <FONT FACE="Arial, Helvetica">sequence_of_statements</FONT>;
if the value of the <FONT FACE="Arial, Helvetica">condition</FONT> is
True, the <FONT FACE="Arial, Helvetica">sequence_of_statements</FONT>
is executed; if False, the execution of the <FONT FACE="Arial, Helvetica">loop_statement</FONT>
is complete.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2980"></A><A NAME="I2981"></A>For the
execution of a <FONT FACE="Arial, Helvetica">loop_statement</FONT> with
a <B>for</B> <FONT FACE="Arial, Helvetica">iteration_scheme</FONT>, the
<FONT FACE="Arial, Helvetica">loop_parameter_specification</FONT> is
first elaborated. This elaboration creates the loop parameter and elaborates
the <FONT FACE="Arial, Helvetica">discrete_subtype_definition</FONT>.
If the <FONT FACE="Arial, Helvetica">discrete_subtype_definition</FONT>
defines a subtype with a null range, the execution of the <FONT FACE="Arial, Helvetica">loop_statement</FONT>
is complete. Otherwise, the <FONT FACE="Arial, Helvetica">sequence_of_statements</FONT>
is executed once for each value of the discrete subtype defined by the
<FONT FACE="Arial, Helvetica">discrete_subtype_definition</FONT> (or
until the loop is left as a consequence of a transfer of control). <A NAME="I2982"></A>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 <B>reverse</B> is present, in which case
the values are assigned in decreasing order. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>The order
of creating the loop parameter and evaluating the <FONT FACE="Arial, Helvetica">discrete_subtype_definition</FONT>
doesn't matter, since the creation of the loop parameter has no side
effects (other than possibly raising Storage_Error, but anything can
do that). </FONT></DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>6&nbsp;&nbsp;A loop parameter is a constant;
it cannot be updated within the <FONT FACE="Arial, Helvetica">sequence_of_statements</FONT>
of the loop (see <A HREF="AA-3-3.html">3.3</A>).</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>7&nbsp;&nbsp;An <FONT FACE="Arial, Helvetica">object_declaration</FONT>
should not be given for a loop parameter, since the loop parameter is
automatically declared by the <FONT FACE="Arial, Helvetica">loop_parameter_specification</FONT>.
The scope of a loop parameter extends from the <FONT FACE="Arial, Helvetica">loop_parameter_specification</FONT>
to the end of the <FONT FACE="Arial, Helvetica">loop_statement</FONT>,
and the visibility rules are such that a loop parameter is only visible
within the <FONT FACE="Arial, Helvetica">sequence_of_statements</FONT>
of the loop. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Implementation Note: </B>An
implementation could give a warning if a variable is hidden by a <FONT FACE="Arial, Helvetica">loop_parameter_specification</FONT>.
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>8&nbsp;&nbsp;The <FONT FACE="Arial, Helvetica">discrete_subtype_definition</FONT>
of a for loop is elaborated just once. Use of the reserved word <B>reverse</B>
does not alter the discrete subtype defined, so that the following <FONT FACE="Arial, Helvetica">iteration_scheme</FONT>s
are not equivalent; the first has a null range. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<DIV Class="Examples"><TT><B>for</B>&nbsp;J&nbsp;<B>in</B>&nbsp;<B>reverse</B>&nbsp;1&nbsp;..&nbsp;0<BR>
<B>for</B>&nbsp;J&nbsp;<B>in</B>&nbsp;0&nbsp;..&nbsp;1</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>13.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>If a <FONT FACE="Arial, Helvetica">loop_parameter_specification</FONT>
has a static discrete range, the subtype of the loop parameter is static.
</FONT></DIV>

<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Example of a
loop statement without an iteration scheme:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>15</FONT></DIV>
<DIV Class="Examples"><TT><B>loop</B><BR>
&nbsp;&nbsp;&nbsp;Get(Current_Character);<BR>
&nbsp;&nbsp;&nbsp;<B>exit</B>&nbsp;<B>when</B>&nbsp;Current_Character&nbsp;=&nbsp;'*';<BR>
<B>end</B>&nbsp;<B>loop</B>;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Example of a loop
statement with a <B>while</B> iteration scheme:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>17</FONT></DIV>
<DIV Class="Examples"><TT><B>while</B>&nbsp;Bid(N).Price&nbsp;&lt;&nbsp;Cut_Off.Price&nbsp;<B>loop</B><BR>
&nbsp;&nbsp;&nbsp;Record_Bid(Bid(N).Price);<BR>
&nbsp;&nbsp;&nbsp;N&nbsp;:=&nbsp;N&nbsp;+&nbsp;1;<BR>
<B>end</B>&nbsp;<B>loop</B>;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>18</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Example of a loop
statement with a <B>for</B> iteration scheme:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>19</FONT></DIV>
<DIV Class="Examples"><TT><B>for</B>&nbsp;J&nbsp;<B>in</B>&nbsp;Buffer'Range&nbsp;<B>loop</B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--<I>&nbsp;&nbsp;works&nbsp;even&nbsp;with&nbsp;a&nbsp;null&nbsp;range</I><BR>
&nbsp;&nbsp;&nbsp;<B>if</B>&nbsp;Buffer(J)&nbsp;/=&nbsp;Space&nbsp;<B>then</B><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Put(Buffer(J));<BR>
&nbsp;&nbsp;&nbsp;<B>end</B>&nbsp;<B>if</B>;<BR>
<B>end</B>&nbsp;<B>loop</B>;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>20</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Example of a loop
statement with a name:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>21</FONT></DIV>
<DIV Class="Examples"><TT>Summation:<BR>
&nbsp;&nbsp;&nbsp;<B>while</B>&nbsp;Next&nbsp;/=&nbsp;Head&nbsp;<B>loop</B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--<I>&nbsp;see&nbsp;<A HREF="AA-3-10-1.html">3.10.1</A></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sum&nbsp;&nbsp;:=&nbsp;Sum&nbsp;+&nbsp;Next.Value;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;:=&nbsp;Next.Succ;<BR>
&nbsp;&nbsp;&nbsp;<B>end</B>&nbsp;<B>loop</B>&nbsp;Summation;</TT></DIV>

<H4 ALIGN=CENTER>Wording Changes from Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>21.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The constant-ness of loop parameters
is specified in <A HREF="AA-3-3.html">3.3</A>, ``<A HREF="AA-3-3.html">Objects
and Named Numbers</A>''. </FONT></DIV>

<HR>
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-5-4.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-5-6.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>