sorry ok, I see - it's Expr.head and Expr.args Man, I really wish Julia had something like python's help(Expr) to see all the methods/fields of a class...
On Tuesday, December 8, 2015 at 8:26:35 PM UTC-8, vis...@stanford.edu wrote: > > Situations where the printed form of an expression (i.e, what you'd type > into julia REPL, for example) are equivalent aren't "equal" per julia's > standards: > > Expr(:call, :<, 1, 2) --> :(1 < 2) > Meta.show_sexpr(:(1 < 2)) --> (:comparison, 1, :<, 2) > Expr(:call, :<, 1, 2) == :(1 < 2) --> FALSE > > I figure that's expected because the s-expressions behind the scenes > aren't accurate. > So the workaround is: > > Expr(:call, :<, 1, 2) == :(<(1,2)) --> TRUE > > This isn't ideal, but at least there's a way to express the Expr object I > want in terms of julia's syntax. > Is there another way to make these two semantically equivalent > representations actually be equal? > > Second - a much weirder problem: > > Meta.show_sexpr(:(symbol.x())) --> (:call, (:., :symbol, (:quote, :x))) > > > Ok, so make an expression: > > Meta.show_sexpr(Expr(:call, Expr(:., :symbol, Expr(:quote, :x)))) --> (:call, > (:., :symbol, (:quote, :x))) > > > Cool. So this time the expression object and the actual julia > representation are the exact same. > > However: > > Expr(:call, Expr(:., :symbol, Expr(:quote, :x))) == :(symbol.x()) --> FALSE > > > And stragely > > > Meta.show_sexpr(Expr(:call, Expr(:., :symbol, Expr(:quote, :x)))) == > Meta.show_sexpr(:(symbol.x())) --> TRUE > > What is going on!? And how do I get these expressions to agree? > > > Vishesh > > > > > >