mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-20 14:19:18 +02:00
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.
62 lines
1.7 KiB
Scheme
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))))
|
|
|