如何在mathematica中修复此列表分配

时间:2011-01-10 23:07:59

标签: wolfram-mathematica

我想在Mathematica中执行以下操作

Table[p[i], {i, -3, 0}] = Flatten[{Table[0, {i, -3, -1}], 1}]

但我收到了一个错误:

Set::write: Tag Table in Table[p[i], {i, -3, 0}] is Protected.

但是,完全可以这样做:

{p[-3], p[-2], p[-1], p[0]} = Flatten[{Table[0, {i, -3, -1}], 1}]

非常感谢!

2 个答案:

答案 0 :(得分:5)

强制LHS评估成可分配给的部分:

评估[表[p [i],{i,-3,0}]] =展平[{Table [0,{i,-3,-1}],1}]

答案 1 :(得分:4)

它不起作用的原因是因为Set具有属性HoldFirst。这意味着Set[a,stuff]传递了符号a而不是aSet函数的值。至于它具有此属性的原因,请问自己:当您执行Set[a,stuff]时,是否要将stuff分配给符号aa的值?< / p>

在您的示例中,a包含变量名称表,因此您希望aHoldFirst的值很烦人。但是,大部分时间a的值都为5,您希望a=stuffstuff分配给符号a,而不是值5 1}}

绕过Hold属性的常见模式如下:

Set@@{Table[p[i], {i, -3, 0}],Flatten[{Table[0, {i, -3, -1}], 1}]}