;; This buffer is for notes you don't want to save, and for Lisp evaluation. ;; If you want to create a file, visit that file with C-x C-f, ;; then enter the text in that file's own buffer. (define-syntax my-let (syntax-rules () [(_ ((x v) ...) e1 e2 ...) ((lambda (x ...) e1 e2 ...) v ...)])) (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 ++ (syntax-rules () [(_ x) (begin (set! x (+ x 1)) x)])) (define-syntax ++-post (syntax-rules () [(_ x) (let ([original-value x]) (set! x (+ 1 x)) original-value)])) (define-syntax my-and (syntax-rules () [(_) #t] [(_ exp) exp] [(_ exp1 exp2 ...) (if (not exp1) #f (my-and exp2 ...))])) (define-syntax for (syntax-rules (:) [(_ (init : test : update ...) body ...) (begin init (let loop () (if test (begin body ... update ... (loop)))))])) (for ((begin (define i 0)(define j 1)) : (< i 12) : (++ i)) (display i) (display " ") (display j) (newline) (set! j (* 2 j)))