DMUG-Archiv 2005

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

Re: Expressions

> With[ { a = 2, b = 3 }, a + b x]
> 
> wird
> 
> 2 + 3 x   ausgegeben.
> 
> Aber mit
> 
> g = a + b x ;
> With[ { a = 2, b = 3 }, g]
> 
> ist das Resultat
> 
> a + b x
> 
> was meiner Meinung nach zumindest nicht dem entspricht, was im Handbuch
> bzw. in der Hilfe beschrieben wird.  ist g keine expression? Warum werden
> hier die Größen a und b nicht ersetzt?

With funktioniert ganz ähnlich wie Ersetzungen in
Substitutionsregeln, nämlich, daß der Ersetzungsparameter
nicht als Variable "greifbar" ist (wenn das der richtige
Ausdruck ist), daher geht etwa

With[ {x = {}}, AppendTo[x, 1] ]

schief.

Im Gegensatz dazu definiert Block "echte" Variablen, daher
funktioniert

Block[ {x = {}}, AppendTo[x, 1] ]

ganz einwandfrei.  Module definiert ebenfalls "echte" lokale
Variable, aber da Module lexical scoping implementiert (wenn
auch nur als dynamical scoping mit umbenannten Variablen), haben
diese lokalen Variable keinen Einfluß auf zuvor definierte
Ausdrücke.

Analog werden die Substitutionen von With sofort eingesetzt,
d.h.

With[ {a = 2}, Print[HoldForm[a]] ]

gibt "2" zurück, während dasselbe Konstrukt mit Block "a"
hinschreibt.


Viele Grüße,

Thomas


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

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