Macro dolist

Syntax:

dolist (var list-form [result-form]) {declaration}* {tag | statement}* {result}*

Arguments and Values:

var—a symbol.

list-form—a form.

result-form—a form.

declaration—a declare expression; not evaluated.

tag—a go tag; not evaluated.

statement—a compound form; evaluated as described below.

7.8.3 4results—if a return or return-from form is executed, the values passed from that form; otherwise, the values returned by the result-form or nil if there is no result-form.

Description:

7.8.3 6dolist iterates over the elements of a list. The body of dolist is like a tagbody. It consists of a series of tags and statements.

dolist evaluates list-form, which should produce a list. It then executes the body once for each element in the list, in the order in which the tags and statements occur, with var bound to the element. Then result-form is evaluated. tags label statements.

At the time result-form is processed, var is bound to nil.

An implicit block In effect, a \specref{block}named nil surrounds dolist. Made symmetric with the wording in DOTIMES. -kmp 26-May-93 7.8.3 5 7.8.3 8 \macref{return} may be used to terminate the loop and return a specified value.return may be used to terminate the loop immediately without performing any further iterations, returning zero or more values.

Changed per Loosemore #28, first public review For \macref{dolist}, the \term{scope} of the name binding does not include any initial value form, but the stepper and optional result forms are included.The scope of the binding of var does not include the list-form, but the result-form is included.

Added per Loosemore #27, first public reviewIt is implementation-dependent whether dolist establishes a new binding of var on each iteration or whether it establishes a binding for var once at the beginning and then assigns it on any subsequent iterations.

Examples:

7.8.3 7
 (setq temp-two '()) → NIL
 (dolist (temp-one '(1 2 3 4) temp-two) (push temp-one temp-two)) → (4 3 2 1)

 (setq temp-two 0) → 0
 (dolist (temp-one '(1 2 3 4)) (incf temp-two)) → NIL
 temp-two → 4

 (dolist (x '(a b c d)) (prin1 x) (princ " ")) 
⊳ A B C D 
→ NIL

Side Effects:

None.

Affected By:

None.

Exceptional Situations:

None.

See Also:

do, dotimes, tagbody, Section 3.6 (Traversal Rules and Side Effects)

Notes:

go may be used within the body of dolist to transfer control to a statement labeled by a tag.