; iteration syntax (define-syntax while (syntax-rules () ((_ test-exp e0 e1 ...) (letrec ((loop (lambda () (if test-exp (begin e0 e1 ... (loop)))))) (loop))))) ; while example usage (define a 1) (define b 5) (while (< a b) (set! a (+ a 1))) ;; int fact(int n) ;; { ;; int m = 1 ;; while (n > 0 ) { ;; m = m * n; ;; n = n - 1; ;; } ;; return m; ;; } (define (fact n) (let ((m 1)) (begin (while (> n 0) (set! m (* m n)) (set! n (- n 1))) m))) (define-syntax for (syntax-rules () ((_ init-exp test-exp step-exp e0 e1 ...) (begin init-exp (letrec ((loop (lambda () (if test-exp (begin e0 e1 ... step-exp (loop)))))) (loop)))))) (define i 0) (define n 10) (define z 0) (for (set! i 0) (< i n) (set! i (+ i 1)) (set! z (* i 2))) i z