遍历包含广播的表达式树的Julia会导致意外的元组

时间:2017-12-29 06:09:28

标签: tuples julia metaprogramming

我试图了解朱莉娅的元编程。我写了以下内容 代码

function traversal!(x::Expr,mem)
    for xx in x.args
        if isa(xx,Expr)
            push!(mem,xx)
            traversal!(xx,mem)
        end
    end
end

expr=:(sum((x-cos(W2*sin(W1*x+b1)+b2))^2))
mem=[]
a=traversal!(expr,mem)

我希望mem是

  • :((x - cos(W2 * sin(W1 * x + b1)+ b2))^ 2)
  • :( x - cos(W2 * sin(W1 * x + b1)+ b2))
  • :( cos(W2 * sin(W1 * x + b1)+ b2))
  • :( W2 * sin(W1 * x + b1)+ b2)
  • :( W2 * sin(W1 * x + b1))
  • :( sin(W1 * x + b1))
  • :( W1 * x + b1)
  • :( W1 * x)

当我替换表达式

时,结果如预期的那样

expr=:(sum((x-cos(W2*sin(W1*x+b1)+b2))^2))

expr=:(sum((x-cos.(W2*sin.(W1*x+b1)+b2)).^2))

输出变为

  • :((x - cos。(W2 * sin。(W1 * x + b1)+ b2))。^ 2)
  • :( x - cos。(W2 * sin。(W1 * x + b1)+ b2))
  • :( cos。(W2 * sin。(W1 * x + b1)+ b2))
  • :((W2 * sin。(W1 * x + b1)+ b2,))
  • :( W2 * sin。(W1 * x + b1)+ b2)
  • :( W2 * sin。(W1 * x + b1))
  • :(罪。(W1 * x + b1))
  • :((W1 * x + b1,))
  • :( W1 * x + b1)
  • :( W1 * x)

为什么我会获得额外的元组符号?

0 个答案:

没有答案
相关问题