0

谁能解释一下,为什么

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}

?

4

1 回答 1

1

嗯,在这个表达式中

a[[1]] /. {a -> {{1}, {2}}}

左边的子表达式/.将首先被评估,如果a没有第一部分,Mathematica会抱怨。

对于你的第二个表达

(Transpose[a])[[1]]

尝试评估FullForm[(Transpose[a])]. 这应该返回一个表达式(这台机器上没有Mathematica,所以我不是 100% 确定,但我怀疑它会返回Transpose[a],即原始表达式没有被评估,因为Mathematica没有规则将其转换为其他任何东西。)

Part, 当应用于表达式时, 应用于它们FullFormPart[FullForm[(Transpose[a])],1]is a, 然后可用于替换规则对其进行操作。

再次,评估FullForm[(Transpose[{{1}, {2}}])],您现在应该开始了解情况了。

我现在已经在我的Mathematica机器上检查了这个,我对正在发生的事情的猜测是好的。

于 2013-11-12T16:32:59.803 回答