mes/syntax.mes

56 lines
1.2 KiB
Plaintext

;; (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)