我试图了解朱莉娅的元编程。我写了以下内容
代码
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)
为什么我会获得额外的元组符号?