Re: named pattern variable scoped as global, should be local
- To: mathgroup at smc.vnet.net
- Subject: [mg56761] Re: [mg56696] named pattern variable scoped as global, should be local
- From: DrBob <drbob at bigfoot.com>
- Date: Thu, 5 May 2005 06:02:18 -0400 (EDT)
- References: <200505040433.AAA06165@smc.vnet.net>
- Reply-to: drbob at bigfoot.com
- Sender: owner-wri-mathgroup at wolfram.com
Confusion is predictable, if you use the same symbol for the Module local variable and the pattern variable. > (* this returns 14! *) > x = 7; > Module[{x},{1, 2, 3} /. x_ -> 2x]; x in the pattern x_ has nothing to do with the local module variable x, so you have three different x variables -- global, local to the module, and local to the rule. x_ matches {1,2,3} and the right hand side is 2x (evaluated BEFORE the pattern variable has a value, so this is the module variable x, not the rule x). The Module returns 2x (x is undefined in the module) and popping out of the Module, x gets its global value. In this example, the RHS of RuleDelayed is 2x, and it's evaluated AFTER the pattern variable has a value, so that's 2*{1,2,3}: Module[{x},{1,2,3}/.x_:>2x] {2,4,6} Almost the same thing happens here, but for a different reason (because q and x are different symbols): Module[{x},{1,2,3}/.q_->2q] {2,4,6} 2q evaluates to 2q before the Rule is applied, q_ matches {1,2,3}, and 2q becomes 2*{1,2,3}. Bobby On Wed, 4 May 2005 00:33:07 -0400 (EDT), <leenewman at gmail.com> wrote: > 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 > > > > -- DrBob at bigfoot.com
- References:
- named pattern variable scoped as global, should be local
- From: leenewman@gmail.com
- named pattern variable scoped as global, should be local