[erlang-questions] scope of variables

David Hopwood <>
Mon Sep 4 16:59:02 CEST 2006

Vlad Dumitrescu wrote:
> On 9/4/06, Richard Carlsson <> wrote:
>>Ok, so it's not just a question of being able to use local bindings -
>>i's also about being able to inject code (the macro body) into some
>>arbitrary context and avoid accidental name capture of variables in the
>>macro. But then the injected code (not the context) must be written with
>>this in mind, or you will have to do renaming when you inject it.
> Yes, or better: have the compiler do it for me. Which is what I'm trying to do.
> If it will work as advertised, there are a lot of cool things that
> will become posible to do. Like for example optimizations. If I have
> to do a lot of math:pow(X, 72) with different X, I could write a
> powN/2 macro that produces an optimized powN/1 for any particular N
> (72 in this case). That would be
>   Pow72 = fun(X) ->
>     X2 = X*X,
>     X4 = X2*X2,
>     X8 = X4*X4,
>     X16 = X8*X8,
>     X32 = X16*X16,
>     X64 = X32*X32,
>    X64+X8.


I'm also strongly of the opinion that hygiene should be an inherent property
of a macro system, and not dependent on hacks like gensym or use of funky
variable names. (It is OK to be able to *explicitly* declare that a variable
should be captured; this is occasionally useful.)

David Hopwood <>

More information about the erlang-questions mailing list