adding (do ) form
This commit is contained in:
parent
3aad0bd6be
commit
76edead57b
|
@ -424,6 +424,25 @@
|
||||||
(cdr clause)))
|
(cdr clause)))
|
||||||
clauses)))))
|
clauses)))))
|
||||||
|
|
||||||
|
(define-macro (do vars test-spec . commands)
|
||||||
|
(let ((loop (gensym))
|
||||||
|
(test-expr (car test-spec))
|
||||||
|
(vars (map car vars))
|
||||||
|
(inits (map cadr vars))
|
||||||
|
(steps (map (lambda (x)
|
||||||
|
(if (pair? (cddr x))
|
||||||
|
(caddr x)
|
||||||
|
(car x)))
|
||||||
|
vars)))
|
||||||
|
`(letrec ((,loop (lambda ,vars
|
||||||
|
(if ,test-expr
|
||||||
|
(begin
|
||||||
|
,@(cdr test-spec))
|
||||||
|
(begin
|
||||||
|
,@commands
|
||||||
|
(,loop ,@steps))))))
|
||||||
|
(,loop ,@inits))))
|
||||||
|
|
||||||
(define-macro (dotimes var . body)
|
(define-macro (dotimes var . body)
|
||||||
(let ((v (car var))
|
(let ((v (car var))
|
||||||
(cnt (cadr var)))
|
(cnt (cadr var)))
|
||||||
|
|
Loading…
Reference in New Issue