>-----Original Message-----
>From: Veltman, A.T. [mailto:veltman@XXXXXXX.nl]
>Sent: Thursday, February 27, 2003 3:15 PM
>To: 'dmug@XXXXXXX.ch'
>Subject: Set::setps: b[[1]] in assignment of part is not a symbol.
>
>
>Sowwy, immer noch mit Mathematica 3.0,
>hab aber folgendes Problem:
>
>Folgendes functioniert:
>
>In[1]:= a = Table[0, {2}]
>Out[1]= {0,0}
>
>In[2]:= a[[1]] = 1
>Out[2]= 1
>
>In[3]:= b = Table[0, {2}, {3}]
>Out[3]= {{0, 0, 0}, {0, 0, 0}}
>
>Aber wenn Ich versuche
>
>In[4]:= b[[1]][[1]] = 2
>
>sagt er (mathematica):
>
>Set::setps: b[[1]] in assignment of part is not a symbol.
>Out[4]= 2
>
>und er verweigert sich das Element an zu passen:
>
>In[5]:= b[[1]][[2]]
>Out[5]= 0
>
>Wie kann Ich doch, ohne viel Mühe, die Werte im Matrix b anpassen?
>
>danke,
>
>arie veltman
>
Arie,
folgendes geht:
In[7]:= b[[1, 1]] = 2
Out[7]= 2
In[8]:= Part[b, 1, 2] = 3
Out[8]= 3
In[9]:= b = ReplacePart[b, 4, {1, 3}]
Out[9]= {{2, 3, 4}, {0, 0, 0}}
In[10]:= c = b[[2]];
c[[1]] = 5;
b[[2]] = c
Out[12]= {5, 0, 0}
In[13]:= b
Out[13]= {{2, 3, 4}, {5, 0, 0}}
Das ganze ist begründet durch
In[14]:= Attributes[Set]
Out[14]= {HoldFirst, Protected, SequenceHold}
In[15]:= Hold[b[[1]][[1]]] // FullForm
Out[15]//FullForm= Hold[Part[Part[b, 1], 1]]
aber
In[16]:= Hold[b[[1, 1]]] // FullForm
Out[16]//FullForm= Hold[Part[b, 1, 1]]
Set ist eine "special form" die nicht standardmäßig ausgewertet wird. Die
Zuweisung ist zunächst nur an Symbole möglich. Es gibt aber die Ausnahme:
Set hat _effektiv_ so etwas ähnliches wie ein UpValue für Part, wobei das
erste Argument von Part ein Symbol sein muß. Dies ist nur bei der zweiten
(ansonsten äquivalenten) syntaktischen Form gegeben, denn das innere Part
wird zwar nicht ausgewertet ist aber auch dann kein Symbol.
--
Hartmut Wolf