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





Reply via email to