2011-01-10 8 views
3

ich folgend in Mathematica, wie diese Liste Zuordnung zu beheben in Mathematica

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

Aber ich habe einen Fehler zu tun:

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

Allerdings ist es völlig in Ordnung zu tun:

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

Vielen Dank!

Antwort

5

die LHS Kraft in Stücke zu bewerten, die zugeordnet werden können:

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

+0

Ich habe dabei viele Warnungen bekommen. Gibt es einen sauberen Weg, dies zu tun? Vielen Dank! –

+0

@Qiang Es gibt keine Probleme mit dieser Antwort. Ich schlage vor, dass Sie es nach einem Clear ["Global' *"] oder einem sauberen Mma-Start versuchen. –

+0

@belisarius: richtig. Ich habe vergessen, klar zu machen. Aber scheint nicht sehr elegant oder zumindest so, wie ich es wollte. :( –

4

Der Grund, warum es nicht funktioniert, ist, weil Set Attribut HoldFirst hat. Es bedeutet, dass Set[a,stuff] das Symbol a anstelle von a an Set Funktion übergibt. Stellen Sie sich die Frage, warum dieses Attribut vorhanden ist: Wenn Sie Set[a,stuff] eingeben, möchten Sie stuff dem Symbol a oder dem Wert a zuweisen?

In Ihrem Beispiel enthält a eine Tabelle mit Variablennamen, so dass Sie den Wert von a und HoldFirst ist ärgerlich. Doch die meiste Zeit a einen Wert wie 5 haben und Sie wollen a=stuffstuff zu Symbol zuweisen a, nicht auf den Wert 5

Ein gemeinsames Muster zu umgehen Holding-Attribute ist die folgende:

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