MathGroup Archive 2005

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

Search the Archive

Re: a dangerous feature of Module[]?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg57458] Re: [mg57422] a dangerous feature of Module[]?
  • From: Chris Chiasson <chris.chiasson at gmail.com>
  • Date: Sat, 28 May 2005 05:39:46 -0400 (EDT)
  • References: <200505270857.EAA07697@smc.vnet.net>
  • Reply-to: Chris Chiasson <chris.chiasson at gmail.com>
  • Sender: owner-wri-mathgroup at wolfram.com

Set is evaluating the right hand side before the assignment to g. In
that case, Mathematica uses global value for x before assigning g. Try
??g after both of the methods to see what is happening.

On 5/27/05, Gennady Stupakov <stupakov at yahoo.com> wrote:
> I've spent considerate time recently debugging my Mathematica code until I figured
> out that the problem is in a strange behaviour of the Module[] function.
> Here is a simple example that demonstrate this feature.
> 
> I have a gloval variable x:
> 
> In[1]:= x=3
> 
> Out[1]= 3
> 
> Now I define a module with local varibles x and f, call g, and get the
> expected result. The value of global variable x does not interfere with
> the local x, as expected.
> 
> In[2]:= g:=Module[{x,f},f[x_]:=x;f[5]]
> 
> In[3]:= g
> 
> Out[3]= 5
> 
> However, if I use Set (=) instead of SetDelayed (:=) in the definition of
> my function f inside the module, the result will be different:
> 
> In[4]:= h:=Module[{x,f},f[x_]=x;f[5]]
> 
> In[5]:= h
> 
> Out[5]= 3
> 
> In this case the Module ignores the fact that x is supposed to be a local
> variable, and for some reason uses the value of the global x inside the
> module.
> 
> Can somebody explain me if this is an expected behaviour of the Module[]?
> 
> I am using version 5.1 on a PC:
> In[7]:= $Version
> 
> Out[7]= 5.1 for Microsoft Windows (October 25, 2004)
> 
> Thanks.
> Gennady.
> 
> 


-- 
Chris Chiasson
http://chrischiasson.com/
1 (810) 265-3161


  • Prev by Date: PostScipt from Mathlink
  • Next by Date: Re: Integration under Mathematica 5.0
  • Previous by thread: a dangerous feature of Module[]?
  • Next by thread: Limit of list