[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Me no understand scoping
From: |
Clinton Ebadi |
Subject: |
Re: Me no understand scoping |
Date: |
Tue, 29 Jul 2008 23:24:59 -0400 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.2 (gnu/linux) |
"Maciek Godek" <address@hidden> writes:
> Hi,
> consider the following code (simple iteration
> construct invented mainly to cause naming
> conflict, as the function 'times' is already
> defined in guile)
>
> (define-macro (times n f)
> `(let ((env (the-environment)))
> (let loop ((i 0))
> (if (< i ,n)
> (begin
> (local-eval ,f env)
> (loop (1+ i))
> )
> )
> )
> )
> )
>
> the whole thing with env was made as
> a workaround disallowing f to see the
> i variable defined in the macro (and to
> perhaps see the value that otherwise
> would be shadowed)
>
> however,
>
> (times 20 (display i))
>
> yields
>
> 012345678910111213141516171819
>
> Why?
`macroexpand-1' is helpful here -- (local-eval ,f env) is wrong.
As a matter of style, you probably want to avoid local-eval as it will
have to be removed whenever Guile ends up with a faster compiler (one
day when guile-vm is integrated into core and lexical environments
become fixed arrays or similar), and messing with existing lexical
environments is Very Bad (tm). Avoiding all uses of eval and, by
extension, local-eval is a good idea.
--
The hubbub of the waking life might close a door
which in the dreamy Subliminal might remain ajar...
- Me no understand scoping, Maciek Godek, 2008/07/29
- Re: Me no understand scoping,
Clinton Ebadi <=
- Re: Me no understand scoping, Maciek Godek, 2008/07/30
- Re: Me no understand scoping, Jon Wilson, 2008/07/30
- Re: Me no understand scoping, Klaus Schilling, 2008/07/30
- Re: Me no understand scoping, Maciek Godek, 2008/07/30
- Re: Me no understand scoping, Neil Jerram, 2008/07/31
- Re: Me no understand scoping, Maciek Godek, 2008/07/31
- Re: Me no understand scoping, Neil Jerram, 2008/07/31
- Re: Me no understand scoping, Maciek Godek, 2008/07/31
- Re: Me no understand scoping, Clinton Ebadi, 2008/07/31