Sorry, forgot to add: it seems the gensym doesn't survive a function 
definition:

function testfun()
  @test
end

and I need to have "global $var" in every quote to use those macros inside 
functions.

On Saturday, 24 January 2015 00:34:27 UTC-5, Kirill Ignatiev wrote:
>
> What I want to do is like this:
>
> (let ((a (gensym)))
>   (eval
>    `(boundp ',a)))
>
> and I want to construct something like
>
> macro test()
>   var = gensym("var")
>   quote
>     isdefined($var) ? $var += 1 : $var = 0
>     @show $var
>   end
> end
>
> for i=1:10; @test; end
> # Desired output:
> # ##var#8589 => 0
> # ##var#8589 => 1
> # ...
>
> But this is wrong, because the value of var is passed to isdefined, not 
> the symbol referring to it. So it's like having (eval `(boundp ,a)) in 
> lisp. I can do this instead:
>
> macro test()
>   var = gensym("var")
>   eval(:($var = -1))
>   quote
>     $var += 1
>     @show $var
>   end
> end
>
> but this requires me to initialize the variable at the beginning.
>
> What is the syntax for referring to the symbol stored in a variable, not 
> value of that symbol, inside a quoted expression?
>
> Also, are there any guarantees about how long gensym's live in this case? 
> Does var go into global scope?
>
> I'm only learning Julia, and I'm slightly confused by what it expects me 
> to write.
>

Reply via email to