Node:Iteration, Next:Delayed evaluation, Previous:Sequencing, Up:Derived expression types
(do ((<variable1> <init1> <step1>) | library syntax |
...) (<test> <expression> ...) <command> ...)
Each iteration begins by evaluating <test>; if the result is false (see section see Booleans), then the <command> expressions are evaluated in order for effect, the <step> expressions are evaluated in some unspecified order, the <variable>s are bound to fresh locations, the results of the <step>s are stored in the bindings of the <variable>s, and the next iteration begins. If <test> evaluates to a true value, then the
<expression>s are evaluated from left to right and the value(s) of
the last <expression> is(are) returned. If no <expression>s
are present, then the value of the The region of the binding of a <variable>
consists of the entire A <step> may be omitted, in which case the effect is the
same as if (do ((vec (make-vector 5)) (i 0 (+ i 1))) ((= i 5) vec) (vector-set! vec i i)) ==> #(0 1 2 3 4) (let ((x '(1 3 5 7 9))) (do ((x x (cdr x)) (sum 0 (+ sum (car x)))) ((null? x) sum))) ==> 25 | |
let <variable> <bindings> <body> | library syntax |
"Named (let loop ((numbers '(3 -2 1 6 -5)) (nonneg '()) (neg '())) (cond ((null? numbers) (list nonneg neg)) ((>= (car numbers) 0) (loop (cdr numbers) (cons (car numbers) nonneg) neg)) ((< (car numbers) 0) (loop (cdr numbers) nonneg (cons (car numbers) neg))))) ==> ((6 1 3) (-5 -2)) |