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
>>>
>>>
>>>
>>>
>>>
>>

Reply via email to