[gambit-list] macro vs runtime environment

Adrien Piérard pierarda at iro.umontreal.ca
Fri Aug 14 04:28:18 EDT 2009


2009/8/14 lowly coder <lowlycoder at huoyanjinjing.com>:
> why is:

> (load "t1.scm")
> (define x 20)

Load works at run time.

(define foo "bar.scm")
(lofd foo)

> valid, where as:
> (define-macro (foo)
>  (load "t1.scm")
>  (define x 20))
> result in a ill-placed define error?

You have to think that macros is a different language than scheme that
just conveniently happen to have a similar syntax.

> I was under the impression that scheme define-macro was just scheme
> code; it appears that the environment the macro is run in is different
> from the runtime ones?

I think told you yesterday, with sample code, that macros accessed
basically two environments, and handled them differently than the
runtime code.
And also, you *want* a different environment than the runtime one…

I *strongly* suggest you buy and read "Lisp In Small Pieces" by
Christian Queinnec.
All your macros questions, current and future, are answered there.

P!

-- 
Français, English, 日本語, 한국어



More information about the Gambit-list mailing list