The repeat
construct causes iteration to terminate after a
specified number of times.
The loop body executes n times, where n is the value
of the expression form. The form argument is evaluated one time
in the loop prologue. If the expression evaluates to 0 or
to a negative number, the loop body is not evaluated.
The constructs always
,
never
,
thereis
,
while
,
until
,
and the macro loop-finish
allow conditional termination of iteration within
a loop.
The constructs always
, never
, and thereis
provide
specific values to be returned when a loop terminates.
Using always
, never
, or thereis
in a loop with
value accumulation clauses that are not into
causes
an error of type program-error to be signaled (at macro expansion time).
Since always
, never
, and thereis
use
the return-from special operator
to terminate iteration,
any finally
clause that is supplied is not evaluated
when exit occurs due to any of these constructs.
In all other respects these
constructs behave like the while
and until
constructs.
The always
construct takes one form and terminates the
loop
if the form ever evaluates to nil; in this case, it returns
nil. Otherwise, it provides a default return value of t.
If the value of the supplied form is never nil, some other construct
can terminate the iteration.
The never
construct terminates iteration the first time that
the value of the supplied form is non-nil; the loop returns
nil.
If the value of the supplied form is always nil, some other
construct can terminate the iteration.
Unless some other clause contributes
a return value, the default value returned is t.
The thereis
construct terminates iteration the first time that the
value of the supplied form is non-nil; the loop returns the
value of the supplied form.
If the value of the supplied form
is always nil, some other
construct can terminate the iteration. Unless some other clause contributes a
return value, the default value returned is nil.
There are two differences between the thereis
and until
constructs:
The until
construct does not return a value or
nil based on the value of the supplied form.
The until
construct executes
any finally
clause.
Since thereis
uses
the return-from special operator
to terminate iteration,
any finally
clause that is supplied is not evaluated
when exit occurs due to thereis
.
The while
construct allows iteration to continue until the
supplied form
evaluates to false. The supplied form
is reevaluated at the location of the while
clause.
The until
construct is equivalent to
while (not form)\dots
. If the value of the
supplied form is non-nil, iteration terminates.
Termination-test control constructs can be used anywhere within the loop body.
The termination tests are used in the order in which they appear.
If an until
or while
clause causes
termination, any clauses that precede it in the source
are still evaluated.
If the until
and while
constructs cause termination,
control is passed to the loop epilogue, where any finally
clauses will be executed.
There are two differences between the never
and until
constructs:
The until
construct does not return
t or nil based on the value of the supplied form.
The until
construct
does not bypass any finally
clauses.
Since never
uses
the return-from special operator
to terminate iteration,
any finally
clause that is supplied is not evaluated
when exit occurs due to never
.
In most cases it is not necessary to use loop-finish
because other loop control clauses terminate the loop.
The macro loop-finish is used to provide a normal exit
from a nested conditional inside a loop.
Since loop-finish transfers control to the loop epilogue,
using loop-finish within a finally
expression can cause
infinite looping.
Examples of REPEAT clause | ||
Examples of ALWAYS | ||
Examples of WHILE and UNTIL clauses |