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.