Common Lisp the Language, 2nd Edition
The syntactic parts of a loop construct are called clauses; the scope
of each clause is determined by the top-level parsing of that clause's
keyword. The following example shows a loop construct 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 Lisp 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, initially, and finally are the only loop keywords that can take any number of Lisp forms and group them as if in a single progn form.
Loop clauses can contain auxiliary keywords, which are sometimes
called prepositions. For example, the first clause in the preceding code
includes the prepositions from and to, which mark
the value from which stepping begins and the value at which stepping
ends.