The variables established in loop are bound as if by let or lambda .
Implementations can interleave the setting of initial values with the bindings .
However, the assignment of the initial values is always calculated in the order specified by the user. A variable is thus sometimes bound to a meaningless value of the correct type , and then later in the prologue it is set to the true initial value by using setq . The loop prologue contains forms that are executed before iteration begins, such as any automatic variable initializations prescribed by the variable clauses, along with any initially clauses in the order they appear in the source. The loop body contains those forms that are executed during iteration, including application-specific calculations, termination tests, and variable stepping 1 . The loop epilogue contains forms that are executed after iteration terminates, such as finally clauses, if any, along with any implicit return value from an accumulation clause or an termination-test clause.