我有表情
expr1 = Meta.parse("x=y+(3*x*(d-g))")
如果我这样做
Meta.show_sexpr(expr1)
我收到了一份尼特表格
(:(=), :x, (:call, :+, :y, (:call, :*, 3, :x, (:call, :-, :d, :g))))
如何从中选择,例如 [x,y,3,x,d,g]?
如有任何帮助,我们将不胜感激
这个问题可以用不同的方式解释。包 MacroTools.jl 包含许多函数,可以轻松遍历语法树并匹配不同类型的表达式 (docs)。
dump
一般而言非常有用(它的用途不限于 Expr
,您当前正在使用的类型).
julia> dump(expr1)
Expr
head: Symbol =
args: Array{Any}((2,))
1: Symbol x
2: Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol +
2: Symbol y
3: Expr
head: Symbol call
args: Array{Any}((4,))
1: Symbol *
2: Int64 3
3: Symbol x
4: Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol -
2: Symbol d
3: Symbol g
这意味着表达式中的第一个
x
是:expr1.args[1]
,并且 g
位于 expr1.args[2].args[3].args[4].args[3]
。
有关此数据结构的更多信息可以在 Julia 手册中找到这里。