#

## 6.1.1.3 Parsing Loop Clauses

The syntactic parts of an extended loop form are called clauses; the rules for parsing are determined by that clause's keyword. The following example shows a loop form with six clauses:

     (loop for i from 1 to (compute-top-value)       ; first clause
           while (not (unacceptable i))              ; second clause
           collect (square i)                        ; third clause
           do (format t "Working on ~D now" i)       ; fourth clause
           when (evenp i)                            ; fifth clause
             do (format t "~D is a non-odd number" i)
           finally (format t "About to exit!"))      ; sixth clause

Each loop keyword introduces either a compound loop clause or a simple loop clause that can consist of a loop keyword followed by a single form. The number of forms in a clause is determined by the loop keyword that begins the clause and by the auxiliary keywords in the clause. The keywords `do`, `doing`, `initially`, and `finally` are the only loop keywords that can take any number of forms and group them as an implicit progn.

Loop clauses can contain auxiliary keywords, which are sometimes called prepositions. For example, the first clause in the code above includes the prepositions `from` and `to`, which mark the value from which stepping begins and the value at which stepping ends.

For detailed information about loop syntax, see the macro loop.

The following X3J13 cleanup issue, not part of the specification, applies to this section:

- LOOP-MISCELLANEOUS-REPAIRS:FIX

Copyright 1996-2005, LispWorks Ltd. All rights reserved.