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))
|