My bad. The reason is (a little bit) different.
LOAD does not access the same current environment when in a macro. It loaded the file in a fresh environment, where x was indeed unbound.
A simpler example is
$ cat tata.scm (define (f x) (+ y x))
$ cat toto.scm (define-macro (foo) (define y 1) (load "tata") (pp (f 3))) (foo)
$ gsi toto.scm *** ERROR IN f, "tata.scm"@2.6 -- Unbound variable: y
The solution? Refactor all your code. I really believe that you are doing things with macros that should be done some other way…
P!
2009/8/15 lowly coder lowlycoder@huoyanjinjing.com:
They're loading/including the same function. Then I execute them, and I get different results. Isn't that kind of weird? If you loaded or included a function for +, wouldn't you expect it to give you the same results?
On Sat, Aug 15, 2009 at 12:28 AM, Adrien Piérardpierarda@iro.umontreal.ca wrote:
note that lookup-var is just a function ... i'm surprised that load/include gives me different results
Why are you surprised? If two functions exist, then they do two different things.
The fact is that LOAD is a function (eval'd at runtime, as one explained you), and that INCLUDE is not. Include is a reader-macro. When the parser sees an INCLUDE, it parses the source code of the other file, and then inserts it instead of that form.
No magic here.
P!
-- Français, English, 日本語, 한국어