 
 
 
 
 
 
Re: Beginner question on local vars./scoping
- To: mathgroup at smc.vnet.net
- Subject: [mg33681] Re: Beginner question on local vars./scoping
- From: "Louis M. Pecora" <pecora at anvil.nrl.navy.mil>
- Date: Sat, 6 Apr 2002 00:48:59 -0500 (EST)
- Organization: Naval Research Laboratory, Washington, DC
- References: <a8itjb$gco$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <a8itjb$gco$1 at smc.vnet.net>, Mark Pilloff
<mdp1REMOVETHIS at uclink4.berkeley.edu> wrote:
> Hi,
> 
> I've written a function of the sort:
> 
> function := Do some stuff
> 
> The situation is that the 'Do some stuff' depends upon various global vars.
> but some of the 'stuff' yields the same result unless some of the global
> vars have changed.  I'd like to memoize the results and have some local vars
> to function that will remember the value of the global vars when function
> was last called and only recompute if necessary.  Right now I have global
> vars like lastValueOfVarSeen and lastResultOfStep2 but I'd prefer to make
> them local to function but still permanent.
> 
> 1.  How can I do this?
> 2.  Is there a better / more standard way to achieve the goal described
> above?
> 
> Thanks for any help,
> Mark
Best way to do this is probably to write a package that has it's own
stored values in it, i.e. in its namespace.
e.g.:
(* Define the Package PackageX (or whatever name you want). *)
BeginPackage["packageX`"];
(* Interface to packageX. *)
AFunction::usage = "AFunction[inputval_]";
(* End Interface. *)
Begin["`Private`"];
(* PackageX parameters *)
valholder = 0;
(* The function itself *)
AFunction[in_]:=Block[
  If[in == valholder,
    Return[Null],   (* Do nothing *)
    valholder=in;   (* Set new value for check on later function call *)
    (* Do other things *)
  ];
]
(* End of Private. *)
End[];
(* End of PackageX. *)
EndPackage[];
(* Example usage *)
aparameter=10;
AFunction[aparamter];  (* Function is active *)
AFunction[aparamter];  (* Nothing happens *)
aparameter=22;
AFunction[aparamter];  (* Function is active, again *)
Hope that helps.
-- 
-- Lou Pecora
  - My views are my own.

