MathGroup Archive 2005

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

Search the Archive

Re: How to free memory?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg59834] Re: How to free memory?
  • From: "Drago Ganic" <drago.ganic at in2.hr>
  • Date: Tue, 23 Aug 2005 04:51:34 -0400 (EDT)
  • Organization: Iskon Internet d.d.
  • References: <de46jr$r62$1@smc.vnet.net><de6lru$cg5$1@smc.vnet.net> <de9cs2$q5l$1@smc.vnet.net> <debsf8$969$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

>

> Wow!  What you are saying is very huge to me.  I though that the scope

> of the variables defined in a Module is just inside the Module.  But as

> you wrote, the variables defined in a Module can be referred to from

> outside (by referring e$nnn in my case), and they are effectively

> global variables!  This is quite different from the concept of local

> variables in the ordinary programming languages like C and C++.

> Thanks,

> Wonseok Shin

>



Hi,

The scope of variables defined in Module is just inside the Module 
**except** when they are returned from the Module. In this case they 
survive.



Let's look at one example:



In[1]:=Module[{t}, t = 8]    (* not returned, constructed & destructed *)

Out[1]=8



In[2]:=?Global`*

Global`t



In[3]:=Module[{t}, t]    (* returned *)

Out[3]=t$21



In[4]:=?Global`*

t  t$21



In[5]:=Module[{t}, t]  (* another constructor*)

Out[5]=t$26



In[5]:=?Global`*

t  t$21  t$26



As we can see memory is used by the non-destruction of the new and temporary 
symbols. So, *only in this way* the local variables became global.



As you probably agree this is not the way "local" variables should be used. 
But if used in this way, a Module is a "constructor" of a new variable. This 
feature was used by Roman Maeder's OOP extension to Mathematica.



If you'd like to have just "ordinary" local variables as in C and C++, don't 
return them from the Module construct. Then, they will be automatically 
removed after Module evaluation as expected.



A small exercise: Reset the Kernel, change Module to Block, evaluate and see 
the difference :-)



Greetings from Croatia,

Drago Ganic



  • Prev by Date: Re: Re: Weird Plot problem
  • Next by Date: Re: with 5.2 Mac
  • Previous by thread: Re: How to free memory?
  • Next by thread: Plotting the Lemniscate of Bernoulli