Next: ’for-as-in-list’, Previous: Examples of ’for-as’ Construct, Up: Iteration Control [Contents][Index]
This is the first of seven ‘for/as’ syntaxes.
for var [type-spec]
[{from | downfrom | upfrom} expr1]
[{to | downto | upto | below | above} expr2]
[by expr3]
as var [type-spec] [{from | downfrom | upfrom} expr1]
[{to | downto | upto | below | above} expr2]
[by expr3]
The for or as construct iterates from the value specified by ‘expr1’ to the
value specified by ‘expr2’ in increments or decrements denoted by ‘expr3’.
Each expression is evaluated only once and must evaluate to a number.
The variable var is bound to the value of expr1 in the first iteration and
is stepped by the value of expr3 in each succeeding iteration, or by 1 if
expr3 is not provided.
The following loop keywords serve as valid prepositions within this syntax. At least one of these prepositions must be used with this syntax.
The loop keyword ‘from’ marks the value from which stepping begins, as
specified by expr1. Stepping is incremental by default. For decremental
stepping, use ‘above’ or ‘downto’ with expr2. For incremental stepping,
the default ‘from’ value is 0.
The loop keyword ‘downfrom’ indicates that the variable var is decreased in
decrements specified by expr3; the loop keyword ‘upfrom’ indicates that
var is increased in increments specified by expr3.
The loop keyword ‘to’ marks the end value for stepping specified in expr2.
Stepping is incremental by default. For decremental stepping, use ‘downto’,
‘downfrom’, or ‘above’ with expr2.
The loop keyword ‘downto’ allows iteration to proceed from a larger number to
a smaller number by the decrement expr3. The loop keyword ‘upto’ allows
iteration to proceed from a smaller number to a larger number by the
increment expr3. Since there is no default for expr1 in decremental
stepping, you must supply a value with ‘downto’.
The loop keywords ‘below’ and ‘above’ are analogous to ‘upto’ and ‘downto’,
respectively. These keywords stop iteration just before the value of the
variable var reaches the value specified by expr2; the end value of
expr2 is not included. Since there is no default for expr1 in
decremental stepping, you must supply a value with ‘above’.
The loop keyword ‘by’ marks the increment or decrement specified by expr3.
The value of expr3 can be any positive number. The default value is 1.
In an iteration control clause, the ‘for’ or ‘as’ construct causes
termination when the specified limit is reached. That is, iteration continues
until the value var is stepped to the exclusive or inclusive limit specified
by expr2.
The range is exclusive if expr3 increases or decreases
var to the value of expr2 without reaching that value;
the loop keywords ‘below’ and ‘above’ provide exclusive limits.
An inclusive limit allows var to attain the value of
expr2;
‘to’, ‘downto’, and ‘upto’ provide inclusive limits.
A common convention is to use ‘for’ to introduce new iterations and ‘as’ to introduce iterations that depend on a previous iteration specification.17
;;; Print some numbers.
(loop as i from 1 to 5
do (print i)) ;Prints 5 lines
;;; Print every third number.
(loop for i from 10 downto 1 by 3
do (print i)) ;Prints 4 lines
;;; Step incrementally from the default starting value.
(loop as i below 5
do (print i)) ;Prints 5 lines
However, loop does not enforce this convention, and some of the examples below violate it. De gustibus non disputandum est.-GLS
Next: ’for-as-in-list’, Previous: Examples of ’for-as’ Construct, Up: Iteration Control [Contents][Index]