Причина, по которой это не работает, заключается в том, что Set
имеет атрибут HoldFirst
. Это означает, что Set[a,stuff]
передает значение a
вместо значения a
функции Set
. Относительно того, почему он имеет этот атрибут, спросите себя: когда вы делаете Set[a,stuff]
, хотите ли вы присвоить stuff
символу a
или значению a
?
В вашем примере a
содержит таблицу имен переменных, поэтому вы хотите, чтобы значение a
и HoldFirst
раздражало. Однако большую часть времени a
будет иметь значение, подобное 5
, и вы хотите, чтобы a=stuff
присваивал stuff
символу a
, а не значению 5
Обычный способ обойти атрибуты удержания следующий:
Set@@{Table[p[i], {i, -3, 0}],Flatten[{Table[0, {i, -3, -1}], 1}]}