Mathematica:当应用于用Rule替换的List时,Part的奇怪行为

时间:2013-11-12 16:22:41

标签: list replace wolfram-mathematica rule

有人可以解释,为什么

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}

1 个答案:

答案 0 :(得分: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]a,然后可供替换规则操作。

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

我现在已经在我的 Mathematica 机器上检查了这一点,我对正在发生的事情的猜测还行。