DMUG-Archiv 2009

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

Re: Gleiches reagiert nicht gleich

Hallo zusammen,

Set will immer einem Symbol etwas zuweisen (so haben wir das gelernt)
und wenn man Part[{a, b, c, d}, 1] = 1 Schreibt , wem sollte hieretwas zugewiesen werden ?

Andreas will damit befehlen, dass a gleich 1 werde.

Schliesslich ist {a, b, c, d} ja ³nur² der Wert von pp , es ist nicht
identisch mit pp

Von pp ist in der Codezeile Part[{a, b, c, d}, 1] = 1 keine Rede. Also, nocheinmal:

In[18]:= Clear[a, b, c, d]
         {a, b, c, d}[[1]] = 1
During evaluation of In[18]:= Set::"setps" : {a, b, c, d} in the part assignment is not a symbol. >>
Out[19]= 1
In[20]:= a
Out[20]= a

Keine Zuweisung an a. Warum nicht? Immerhin ist

In[21]:= Head[{a, b, c, d}[[1]]]
Out[21]= Symbol
In[23]:= FullForm[{a, b, c, d}[[1]]]
Out[23]//FullForm= a

aber

In[25]:= Attributes[Set]
Out[25]= {HoldFirst, Protected, SequenceHold}

Set[] hat Attribut HoldFirst. Daher

In[27]:= Evaluate[{a, b, c, d}[[1]]] = 1
Out[27]= 1
In[28]:= a
Out[28]= 1

Okay und hoffentlich auch Bingo. Das war eine Zuweisung an a. Weiter schreiben Sie, Andreas,

Es ist zwar
In[30]:= pp == {a, b, c, d}
Out[30]= True
Aber: folgende Zuweisung funktioniert:
In[31]:= Part[pp, 1] = 1
Out[31]= 1
In[32]:= FreeQ[pp, a]
Out[32]= True
In[33]:= a
Out[33]= a

Das Part[pp, 1] = 1 ist - wie bereits gestern festgestellt - eine Zuweisung an pp, nicht an a. pp soll an erster Stelle das Element 1 enthalten. Der Wert von a interessiert dabei nicht, a verschwindet einfach aus der Liste:

Part[pp, 1] = 1 ist gleichbedeutend mit pp /. a -> 1

Es ist nicht möglich, hier einen Widerspruch zu konstruieren: Die Zuweisung von Elementen an die Liste pp hat nichts mit der Wertzuweisung an irgendein Element a (das sich auch in der Liste pp befinden kann) zu tun. Mit anderen Worten, die Wirkung von Set[] hängt von den auftretenden Operanden ab.

Wenn dem ersten Element einer Liste ein Wert zugewiesen werden soll, tritt völlig konsistent der zuerst diskutierte Fall ein und man schreibt:

In[50]:= Clear[pp, a, b, c, d]
          pp = {a, b, c, d}
Out[51]= {a, b, c, d}

In[52]:= Evaluate[Part[pp, 1]] = 1
Out[52]= 1

In[53]:= pp
Out[53]= {1, b, c, d}

In[54]:= a
Out[54]= 1

In[55]:= FreeQ[pp, a]
Out[55]= False

a ist immer noch in der Liste p und a hat den Wert 1.

Gruss
Udo.


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

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