Tod*_*len 14 wolfram-mathematica
我试图更深入地了解Mathematica表达式如何在内部表示,并且对LevelMathematica 中的命令逻辑感到困惑.如果我们有以下输入:
In[1]:= a = z*Sin[x + y] + z1*Cos[x1 + y1]
Out[1]= z1 Cos[x1 + y1] + z Sin[x + y]
In[2]:= FullForm[a]
Out[2]= Plus[Times[z1,Cos[Plus[x1,y1]]],Times[z,Sin[Plus[x,y]]]]
In[3]:= TreeForm[a]
Run Code Online (Sandbox Code Playgroud)
我们得到以下树:

如果我们要求Mathematica仅返回4级,我们会得到:
In[4]:= Level[a,{4}]
Out[4]= {x1,y1,x,y}
Run Code Online (Sandbox Code Playgroud)
据我所知,我们比"词干"(0级的Plus运算符)低4级.事实上,我认为我理解正面索引始终与树的茎位置有关.(我希望我这是正确的??)
相反,当你要求负水平时,没有共同的参考点(如上面的干),因为树的不同分支具有不同的长度.所以,如果你要求Mathematica只提供Level -1,我们得到:
In[6]:= Level[a,{-1}]
Out[6]= {z1,x1,y1,z,x,y}
Run Code Online (Sandbox Code Playgroud)
当我猜到我应该回来{x1, y1, x, y}(没有z1&z)时,我对这个输出感到惊讶.但好吧,如果我试着理解这一点,我会把-1代表"每个分支的结尾".如果是这样,那么我期望Level[a,{-2}]返回:
{z1*Cos[x1+y1],z*Sin[x+y],x1+y1,x+y}
Run Code Online (Sandbox Code Playgroud)
但是,这不是我得到的,Mathematica收益:
In[8]:= Level[a,{-2}]
Out[8]= {x1+y1,x+y}
Run Code Online (Sandbox Code Playgroud)
所以,现在我很困惑,并没有看到一致的方式来理解负面水平的输出.
是否有一致,简单的方式来理解这个主题?是否有某种"正确"的方式我应该阅读树的结构?
对于"冗长的问题"感到抱歉,但我希望你明白我在问什么.
Sza*_*lcs 14
如果你查看文档,他们会说:
负级别-n由expr的所有部分组成,深度为n.
所以负面水平不是从参考点计算的,而是根据子表达的深度来定义的. z1*Cos[x1+y1]深度为4,所以当你要求它时它不会被返回Level[..., {-2}].