;; (display "define-syntax...") ;; (define-macro define-syntax ;; (lambda (form expander) ;; (expander `(define-macro ,(cadr form) ;; (let ((transformer ,(caddr form))) ;; (lambda (form expander) ;; (expander (transformer form ;; (lambda (x) x) ;; eq?) ;; expander)))) ;; expander))) ;; (newline) (display "define-syntax when...") ;; (define-syntax when ;; (syntax-rules () ;; ((when condition exp ...) ;; (if condition ;; (begin exp ...))))) ;; (define-macro (when cond exp . rest) ;; `(if ,cond ;; (begin ,exp . ,rest))) ;; (define-macro (when clause . rest) ;; (list 'cond (list clause (list 'let '() rest)))) (define-macro (when expr . body) `(if ,expr ((lambda () ,@body)) 'bah)) (newline) (when #t (display "true") (newline)) (when #t (display "q-when") (newline) '()) (define *gensym* 0) (define (gensym) (set! *gensym* (+ *gensym* 1)) (string->symbol (string-append "g" (number->string *gensym*)))) (newline)