[racket] strange behavior

From: Marijn (hkBst at gentoo.org)
Date: Tue Jan 31 08:13:46 EST 2012

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 31-01-12 13:38, zermelo wrote:
> I have the following problem. I want to replace procedure gensym
> with a mock to test a piece of software with predictable gensym
> values. When this is done, I restore the old gensym. Thus I wrote
> this code in racket:
> 
> (define old-gensym gensym) (define gensym <a mock ...>) ...test... 
> (define gensym old-gensym)
> 
> but when I run it, I get "reference to an identifier before its 
> definition: gensym". On the other hand, if I write the same code in
> the interaction window, everything works as expected.
> 
> Is this a bug?

At the REPL top-level each define statement is evaluated in order, but
in a module things work slightly differently.

What you should prolly do is wrap ...test... in a (let ((gensym
my-mock-gensym)) ...test... ). Another way to get what you want may be
to use `set!' instead of `define' whenever you're REdefining something.

Marijn
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.18 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk8n6QoACgkQp/VmCx0OL2yhuACeJh/0ccLpgYbeegZS6kZS/fpu
t6QAn1KgKQtTs3lE/O4XqNp896KAiSqm
=MJUL
-----END PGP SIGNATURE-----

Posted on the users mailing list.