2011-01-10 42 views
3

解決這個列表任務,我想要做的數學如何在數學

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}] 

非常感謝!

回答

5

強制LHS,以評估成可分配給件:

評價[表[P [I],{I,-3,0}]] =平鋪[{表[0,{I ,-3,-1}],1}]

+0

這樣做的時候我收到了很多警告。有沒有乾淨的方式來做到這一點?謝謝! – 2011-01-10 23:23:24

4

它不起作用的原因是因爲Set有屬性HoldFirst。這意味着Set[a,stuff]通過符號a而不是a的值爲Set函數。至於爲什麼它有這個屬性,問問自己:當你做Set[a,stuff]時,你是否想要將stuff分配給符號a,或者值爲a

在你的例子中,a包含一個變量名稱表,所以你想aHoldFirst的值是討厭的。然而,大多數的時間a會有像5一個值,你想a=stuff分配stuff到符號a,而不是價值5

一個常見的模式來解決控股屬性如下:

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