DMUG-Archiv 2003

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

RE: :setps: b[[1]] in assignment of part is not a symbol.

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



Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html