我想在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}]
非常感谢!
答案 0 :(得分:5)
强制LHS评估成可分配给的部分:
评估[表[p [i],{i,-3,0}]] =展平[{Table [0,{i,-3,-1}],1}]
答案 1 :(得分:4)
它不起作用的原因是因为Set
具有属性HoldFirst
。这意味着Set[a,stuff]
传递了符号a
而不是a
到Set
函数的值。至于它具有此属性的原因,请问自己:当您执行Set[a,stuff]
时,是否要将stuff
分配给符号a
或a
的值?< / p>
在您的示例中,a
包含变量名称表,因此您希望a
和HoldFirst
的值很烦人。但是,大部分时间a
的值都为5
,您希望a=stuff
将stuff
分配给符号a
,而不是值5
1}}
绕过Hold属性的常见模式如下:
Set@@{Table[p[i], {i, -3, 0}],Flatten[{Table[0, {i, -3, -1}], 1}]}