[Larceny-users] define-macro library
Eduardo Cavazos
wayo.cavazos at gmail.com
Fri Feb 13 18:37:54 EST 2009
Hello,
So, I've seen a few "define-macro using syntax-case" implementations
floating around. This one loads and works for simple cases. But it has
trouble when you reference non-rnrs-base functions in the body.
For example, this works:
----------------------------------------------------------------------
> (define-macro (test-macro a) `(list ,a))
> (test-macro 10)
(10)
----------------------------------------------------------------------
but this doesn't:
----------------------------------------------------------------------
> (define (sq n) (* n n))
> (define-macro (test-macro-sq a) `(list (sq ,a)))
> (test-macro-sq 10)
Syntax violation: invalid reference
No binding available for sq in library (define-macro)
----------------------------------------------------------------------
Any suggestions?
Ed
----------------------------------------------------------------------
(library
(define-macro)
(export define-macro)
(import
(for (rnrs base) run expand)
(for (rnrs syntax-case) run expand)
)
(define-syntax define-macro
(lambda (x)
(syntax-case x ()
((_ (name . args) . body)
(syntax (define-macro name (lambda args . body))))
((_ name transformer)
(syntax
(define-syntax name
(lambda (y)
(syntax-case y ()
((_ . args)
(datum->syntax
(syntax _)
(apply transformer
(syntax->datum (syntax args)))))))))))))
)
----------------------------------------------------------------------
More information about the Larceny-users
mailing list