Re: named pattern variable scoped as global, should be local
- To: mathgroup at smc.vnet.net
- Subject: [mg56727] Re: [mg56696] named pattern variable scoped as global, should be local
- From: "Ingolf Dahl" <ingolf.dahl at telia.com>
- Date: Thu, 5 May 2005 06:01:11 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
I have also fallen into this trap.
To avoid this effect, use (as a rule) RuleDelayed (:>) instead of Rule (->)
whenever patterns are used for replacements.
x =14;
Module[{x},{1, 2, 3} /. x_ :> 2x]
returns {2, 4, 6}.
Does anyone know any case where RuleDelayed creates unwanted effects in
similar situations?
Ingolf Dahl
Sweden
> -----Original Message-----
> From: leenewman at gmail.com [mailto:leenewman at gmail.com]
To: mathgroup at smc.vnet.net
> Sent: den 4 maj 2005 06:33
> Subject: [mg56727] [mg56696] named pattern variable scoped as global,
> should be local
>
> When using a named pattern variable within a module, it
> should be scoped locally within the pattern. However, this
> does not seem to work as advertised. For example, shouldn't
> the pattern variable x in the statements below be local to
> the pattern? Does anyone know whether this is a bug, or
> whether I am just missing something about the usage of
> variables in patterns/condition constructs?
>
> (* this returns 14! *)
> x = 7;
> Module[{x},{1, 2, 3} /. x_ -> 2x];
>
> (* this returns {2,4,6}, assuming q is not globally defined.
> *) Remove[q]; Module[{q},{1, 2, 3} /. q_ -> 2q];
>
>
> Lee
>
>