从Meta.show_sexpr中选择

问题描述 投票:0回答:1

我有表情

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

如有任何帮助,我们将不胜感激

parsing julia expression
1个回答
0
投票

这个问题可以用不同的方式解释。包 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 手册中找到这里

© www.soinside.com 2019 - 2024. All rights reserved.