Tja!
Erstmal vielen Dank. Aber einsichtig ist das alles nicht. In der Hilfe
steht With funktioniere ähnlich wie /. .
Mit g = a + b x
bekomme ich mit g /. { a -> 2 ,b -> 3 }
brav
2 + 3 x ,
mit With aber nicht. Wo genau ist der Unterschied?
Grüße
Hans Dolhaine
_________________________________
VTR-TS
Phone: +49-211-797-4809
Fax: +49-211-798-1853
Mobile: 0171 97 17 049
E-Mail: Hans.Dolhaine@XXXXXXX.com
Thomas Hahn
<hahn@XXXXXXX.mpg.d An: Hans.Dolhaine@XXXXXXX.com
e> Kopie: demug@XXXXXXX.ch
Gesendet von: Thema: Re: Expressions
owner-demug@mathe
matica.ch
20.10.2005 14:45
Bitte antworten
an Thomas Hahn
Entscheidung
erforderlich ?
|--------|
| [ ] ja |
|--------|
> 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