On Wed, Dec 9, 2015 at 5:15 PM, Yichao Yu <yyc1...@gmail.com> wrote: > On Wed, Dec 9, 2015 at 5:12 PM, <vish...@stanford.edu> wrote: >> 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...
And for methods, use methodswith ``` julia> methodswith(Expr, true) 6-element Array{Method,1}: ==(x::Expr, y::Expr) at expr.jl:45 copy(e::Expr) at expr.jl:34 hash(x::Expr, h::UInt64) at hashing.jl:60 print(io::IO, ex::Union{Expr,GlobalRef,GotoNode,LabelNode,LineNumberNode,QuoteNode,SymbolNode,TopNode}) at show.jl:290 serialize(s::SerializationState{I<:IO}, ex::Expr) at serialize.jl:227 show(io::IO, ex::Union{Expr,GlobalRef,GotoNode,LabelNode,LineNumberNode,QuoteNode,SymbolNode,TopNode}) at show.jl:291 ``` >> > > ``` > help?> Expr > search: Expr export nextprod expanduser expm exp2 exp expm1 exp10 > expand exponent > > No documentation found. > > Summary: > > type Expr <: Any > > Fields: > > head :: Symbol > args :: Array{Any,1} > typ :: Any > ``` > >> >> 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 >>> >>> >>> >>> >>> >>