chibi-scheme/tests/basic/test09-hygiene.scm
2015-01-26 08:06:59 +09:00

48 lines
1.2 KiB
Scheme

(write (or 1))
(newline)
(write (or #f 2))
(newline)
(write (or 3 #t))
(newline)
(let ((tmp 4))
(write (or #f tmp))
(newline))
(write
(letrec-syntax
((myor
(er-macro-transformer
(lambda (expr rename compare)
(if (null? (cdr expr))
#f
(list (rename 'let) (list (list (rename 'tmp) (cadr expr)))
(list (rename 'if) (rename 'tmp)
(rename 'tmp)
(cons (rename 'myor) (cddr expr)))))))))
(let ((tmp 5)) (myor #f tmp))))
(newline)
(define-syntax myor
(er-macro-transformer
(lambda (expr rename compare)
(if (null? (cdr expr))
#f
(list (rename 'let) (list (list (rename 'tmp) (cadr expr)))
(list (rename 'if) (rename 'tmp)
(rename 'tmp)
(cons (rename 'myor) (cddr expr))))))))
(write (let ((tmp 6)) (myor #f tmp)))
(newline)
(let ((x 'outer))
(let-syntax ((with-x
(syntax-rules ()
((_ y expr)
(let-syntax ((y (syntax-rules () ((_) x))))
expr)))))
(let ((x 'inner))
(write (with-x z (z)))
(newline))))