I'm not 100% sure I understand what you want to do but QuoteNode might be
what you are looking for (the capitalization may be wrong).
On Friday, January 23, 2015 at 10:40:30 PM UTC-7, Kirill Ignatiev wrote:
>
> 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.
>>
>