MathGroup Archive 2005

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

Search the Archive

a dangerous feature of Module[]?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg57422] a dangerous feature of Module[]?
  • From: Gennady Stupakov <stupakov at yahoo.com>
  • Date: Fri, 27 May 2005 04:57:17 -0400 (EDT)
  • Reply-to: Gennady Stupakov <stupakov at yahoo.com>
  • Sender: owner-wri-mathgroup at wolfram.com

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.


  • Prev by Date: NDSolve, FindRoot and shooting method
  • Next by Date: Re: least-squares problem: B ~ X.A
  • Previous by thread: NDSolve, FindRoot and shooting method
  • Next by thread: Re: a dangerous feature of Module[]?