+++ /dev/null
-(define do
- (macro (vars test . cmds)
- (define (_step v)
- (if (null? v)
- '()
- (if (null? (cddr (car v)))
- (_step (cdr v))
- (cons `(set! ,(caar v) ,(caddr (car v)))
- (_step (cdr v))
- )
- )
- )
- )
- `(let ,(map (lambda (v) (list (car v) (cadr v))) vars)
- (while (not ,(car test))
- ,@cmds
- ,@(_step vars)
- )
- ,@(cdr test)
- )
- )
- )
-
-(do ((x 1 (+ x 1)))
- ((= x 10) "done")
- (display "x: ")
- (write x)
- (newline)
- )
-
-(do ((vec (make-vector 5))
- (i 0 (+ i 1)))
- ((= i 5) vec)
- (vector-set! vec i i))