do のバグの修正完了
以下のようなマクロを定義して do のバグを修正した。(マクロの元ネタはR6RS)
(define-macro (do . sexp) (match sexp [(((var init step ...) ...) (test expr ...) command ...) `(letrec ((loop (lambda (,@var) (if ,test (begin #f ; avoid empty begin ,@expr) (begin ,@command (loop ,@(map (lambda (v s) `(do "step" ,v ,@s)) var step))))))) (loop ,@init))] [("step" x) x] [("step" x y) y] [else (syntax-error "malformed do")]))