MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Block v. Module

  • To: mathgroup at smc.vnet.net
  • Subject: [mg68199] Re: Block v. Module
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Sat, 29 Jul 2006 01:00:22 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, UK
  • References: <eaa23s$nde$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Bruce Colletti wrote:
> Re Mathematica 5.2.0.0.
> 
> The Module and Block below "should" return the same result, but they don't.  The Module's result makes no sense, while the Block's result is what I want.
> 
> What's Module doing?  The way I read the Help Text, both should return the same result.  
> 
> Thankx.
> 
> Bruce
> 
> f[Y_String]:=Module[{x},x=StringReplace[Y,{x_->x}]];
> x={"yes","no"};
> f@"xyz"
> 
> {yes,no}~~{yes,no}~~{yes,no}
> 
Hi Bruce,

To solve the issue, use a delayed rule. If we look at the evaluation 
process of

f[Y_String] := Module[{x}, x = StringReplace[Y, {x_ -> x}]];
x = {"yes", "no"};
Trace[f["xyz"]]

we can see that the rule x_ -> x is evaluated before Mathematica creates 
  the temporary variable. Therefore, the value taken by x is the global 
value.

Using a delayed rule, everything works as expected:

f[Y_String] := Block[{x}, x = StringReplace[Y, {x_ :> x}]];
x = {"yes", "no"};
Trace[f["xyz"]]

returns "xyz"

HTH,
Jean-Marc


  • Prev by Date: Re: Plot3D help please
  • Next by Date: Re: Plot3D help please
  • Previous by thread: Re: Block v. Module
  • Next by thread: Re: Block v. Module