(trace-define-syntax my-let (syntax-rules () [(_ ((x v) ...) e1 e2 ...) ((lambda (x ...) e1 e2 ...) v ...)])) '(define a 6) '(my-let ([a 3][b (+ a 1)]) (list a b)) (define-syntax my-if (syntax-rules (then else) [(_ e1 then e2) (if e1 e2)] [(_ e1 then e2 else e3) (if e1 e2 e3)])) (define-syntax ++ ; (++ a) is like ++a in C or Java (syntax-rules () [(_ x) (begin (set! x (+ 1 x)) x)])) (define-syntax ++-post ; (++-post a) is likw a++ in C or Java (syntax-rules () [(_ x) (let ([result x]) (set! x (+ 1 x)) result)])) (define-syntax for (syntax-rules (:) [(_ (init : test : update ...) body ...) (begin init (let loop () (when test body ... update ... (loop))))] [(_ ((init ...) : test : update ...) body ...) (begin init ... (let loop () (when test body ... update ... (loop))))])) (for (((define i 0)(define j 1)) : (< i 7) : (++ i) (set! j (* j 2))) (display (list i j)) (newline)) (trace-define-syntax my-and (syntax-rules () [(_) #t] [(_ e) e] [(_ e1 e2 e3 ...) (if e1 (my-and e2 e3 ...) #f)]))