Hallo Robert,
ich soll und werde im Zweifelsfall RuleDelayed[] bei rhs Pattern[]
verwenden
<snip>
sehe ich zwar nicht 100%ig ein warum aber dafür hilft es.
Warum? Weil Ihre Formulierung ein Schreibfehler ist, mit anderen Worten:
die Variablen (des Patterns) werden in den Module[] injiziert, es müsste
eine Rückwärtsreferenz vom Auswertungsbereich in den Definitionsbereich
des Module[] erfolgen.
In[10]:= x = z;
(* a bugs life *)
{a, b} /. Module[{x, y}, {x_, y_} -> {y, x}]
Out[11]= {b, z}
Eine korrekte Formulierung mit Module[] funktioniert und verwendet nicht
etwa Set[], sondern SetDelayed[].
In[13]:= Clear[nowakR]
nowakR[x_, y_] := Module[{}, {x, y} -> {y, x}]
In[15]:= {a, b} /. nowakR[a, b]
Out[15]= {b, a}
In[16]:= x
Out[16]= z
Das Leben und Leiden des Schreibfehlers kann man anschauen:
In[19]:= TracePrint[{a, b} /. Module[{x, y}, {x_, y_} -> {y, x}]]
{a,b}/.Module[{x,y},{x_,y_}->{y,x}]
ReplaceAll
{a,b}
List
a
b
Module[{x,y},{x_,y_}->{y,x}]
Module
{x_,y_}->{y,x}
Rule
{x_,y_}
List
x_
Pattern
_
y_
Pattern
_
{y,x}
List
y
x
z
{y,z}
{x_,y_}->{y,z}
{x_,y_}->{y,z}
Rule
{x_,y_}
{y,z}
{x_,y_}->{y,z}
{a,b}/.{x_,y_}->{y,z}
{b,z}
List
b
z
Out[19]= {b,z}
Gruss
Udo.
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/