chibi-scheme/tests/basic/test09-hygiene.scm
Alex Shinn b1c0ea895b committing initial bignum support, still needs more thorough testing.
can disable with USE_BIGNUMS=0 - the interactions between this and
USE_FLONUMS are messy, so they will likely be merged into a single
option in the near future (i.e. you either have only fixnums, or a
full range of numeric types).
adding rationals based on this would be easy and is a likely future
feature.  adding native support for complex numbers is unlikely.
2009-07-07 19:16:23 +09:00

62 lines
1.7 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))))
(let ((x 'outer))
(let-syntax ((with-x
(er-macro-transformer
(lambda (form rename compare)
`(let-syntax ((,(cadr form)
(er-macro-transformer
(lambda (form rename2 compare)
(rename2 'x)))))
,(caddr form))))))
(let ((x 'inner))
(write (with-x z (z)))
(newline))))