[Larceny-users] define-macro library

David Rush kumoyuki at gmail.com
Sat Feb 14 00:37:55 EST 2009


Just off the top of my head this sounds like a classic phasing error.
The macro is actually expanded in an entirely different context from
its apparent definition. I believe that R6RS has language regarding
whether definitions are to be available at expansion-time or at
run-time in the spirit of the _You Want It When_ paper.

Caveat Coder: I've not looked at R6RS in detail since I cast my ballot
against it. I have a large R5RS code base and haven't really felt the
need...


2009/2/13 Eduardo Cavazos <wayo.cavazos at gmail.com>:
> 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)

-- 
GPG Public key at http://cyber-rush.org/drr/gpg-public-key.txt



More information about the Larceny-users mailing list