DMUG-Archiv 2009

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

Re: Gleiches reagiert nicht gleich

Hallo Udo,


Am 17.09.09 21:54 schrieb "Udo und Susanne Krause" unter
<su.krause@XXXXXXX.ch>:

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

Also das Symbol a soll den Wert 1 zugewiesen bekommen.

 
Also "Aye aye Sir

Wie wär es einfach mit

a = 1"

Spass beiseite, verbal ausgedrückt, will er wohl

"weise Teil1 (etc.) des Ausdrucks expr, wie auch immer er aussehen möge, den
Wert1 (etc.) zu " 

Und dass das (wegen des Set-Attributes HoldFirst) mit einem erforderlichen
Evaluate wohl geht, hast du dann ja sehr schön erläutert.

Warum aber , das sollte man vielleicht auch sagen, hat Set dieses Attribut ?
(meine Vermutung auf die Schnelle:  um zu tiefe Evaluierung zu vermeiden)

Gruss Carsten



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