有人可以解释,为什么
a[[1]] /. {a -> {{1}, {2}}}
返回错误Part::partd: Part specification a[[1]] is longer than depth of object.
以及
(Transpose[a])[[1]] /. {a -> {{1}, {2}}}
返回
{{1}, {2}}
而
(Transpose[{{1}, {2}}])[[1]]
返回
{1, 2}
答案 0 :(得分:1)
好吧,在这个表达中
a[[1]] /. {a -> {{1}, {2}}}
首先评估/.
左侧的子表达式,如果a
没有第一部分, Mathematica 会抱怨。
第二个表达
(Transpose[a])[[1]]
尝试评估FullForm[(Transpose[a])]
。这应该返回一个表达式(在这台机器上没有 Mathematica ,所以我不是100%肯定,但我怀疑它会返回Transpose[a]
,即原始表达式未被评估,因为 Mathematica 没有规则将其转换为其他任何东西。)
Part
,当应用于表达式时,适用于他们的FullForm
,Part[FullForm[(Transpose[a])],1]
为a
,然后可供替换规则操作。
再次,评估FullForm[(Transpose[{{1}, {2}}])]
,你现在应该开始了解情况。
我现在已经在我的 Mathematica 机器上检查了这一点,我对正在发生的事情的猜测还行。