Hallo Carsten,
<snip> schön erläutert.
Besser als schön wäre fehlerfrei, denn es sollte heissen:
Part[pp, 1] = 1 ist gleichbedeutend mit pp = pp /. a -> 1
Warum aber , das sollte man vielleicht auch sagen, hat Set dieses
Attribut ?
Set[] hat das Attribut HoldFirst, damit das Überschreiben des Wertes einer
Variablen
In[35]:= o = 8
Out[35]= 8
In[36]:= o = 9
Out[36]= 9
ohne vorheriges Bereinigen der Variablen möglich ist:
In[42]:= Clear[myQuirkySet, o]
myQuirkySet[x_, y_] := Set[Evaluate[x], y]
In[44]:= Attributes[myQuirkySet]
Out[44]= {}
In[45]:= myQuirkySet[o, 8]; o
Out[45]= 8
In[47]:= myQuirkySet[o, 9]
During evaluation of In[47]:= Set::setraw: Cannot assign to raw object 8.
Out[47]= 9
In[48]:= o
Out[48]= 8
In[49]:= myQuirkySet[Clear[o]; o, 9]
Out[49]= 9
In[50]:= o
Out[50]= 9
Gruss
Udo.