I have been trying to grok Julia macros, so I've dived into the metaprogramming docs. Whilst playing around with the interpreter, I've run into some peculiarities that I don't quite understand.
julia> versioninfo() Julia Version 0.3.0-prerelease+2690 Commit e4c2f68* (2014-04-20 12:15 UTC) ... 1. Why is typeof( :(:(1+2)) ) == Expr, but typeof( :(:(1)) ) == QuoteNode ? 2. Why is typeof( :(1) ) == Int64, but again typeof( :(:(1)) ) == QuoteNode? 3. Why is typeof( :(1+:($1+2)).args[3].args[1] ) == TopNode? I was assuming that quoting was just a shorthand way for constructing expressions, since the docs say: > There is special syntax for “quoting” code (analogous to quoting strings) > that makes it easy to create expression objects without explicitly > constructing Expr objects. But the types of objects constructed by quoting do not always take the form of an Expr, as above. What is going on here?
