Common Lisp the Language, 2nd Edition
 
 
 
  
  
  
  
 

  The following syntax description provides an overview of the syntax
  for loop clauses.  Detailed syntax descriptions of individual clauses
  appear in sections 26.6 through 26.12.
  A loop consists of the
  following types of clauses:
initial-final ::= initially | finally 
variables ::= with | initial-final | for-as | repeat 
main ::= unconditional | accumulation | conditional 
     | termination | initial-final 
loop ::= (loop [named name] {variables}* {main}*)
Note that a loop must have at least one clause; however, for backward compatibility, the following format is also supported:
(loop {tag | expr}*)
where expr is any Common Lisp expression that can be evaluated, and tag is any symbol not identifiable as a loop keyword. Such a format is roughly equivalent to the following one:
(loop do {tag | expr}*)
A loop prologue consists of any automatic variable initializations prescribed by the variable clauses, along with any initially clauses in the order they appear in the source.
A loop epilogue consists of finally clauses, if any, along with any implicit return value from an accumulation clause or an end-test clause.
