Preserving definitions in dynamic programming?
- To: mathgroup at smc.vnet.net
- Subject: [mg59667] Preserving definitions in dynamic programming?
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Tue, 16 Aug 2005 05:39:32 -0400 (EDT)
- Organization: The University of Western Australia
- Sender: owner-wri-mathgroup at wolfram.com
Here is a question from a former student of mine, Peter Falloon (author of the SpheroidalHarmonics package that will be incorporated into a future version of Mathematica). The approach he outlines below seems quite elegant -- except that defining functions becomes more complicated -- but maybe that is the price you have to pay to take full advantage of dynamic programming. Comments appreciated. ________________________________________________________________________ I want to use dynamic programming in some function definitions, but I'd like to be able to Clear the dynamic values easily, but not erase the principal definitions. One way is to use "standard" dynamic programming and directly modify the DownValues. This is potentially dangerous however, so I was trying to find a "safer" approach. I ended up with the following idea (as a simple example): SetAttributes[dynamicDefinitions, HoldAll] f[x_] := dynamicDefinitions[f[x]] /. dynamicDefinitions[f[xp_]] :> (Print["evaluating for the first time..."]; Pause[2]; dynamicDefinitions[f[xp]] = xp^2) f[1] evaluating for the first time... 1 f[1] 1 ?f Global`f f[x_] := dynamicDefinitions[f[x]] /. dynamicDefinitions[f[xp_]] :> (Print["evaluating for the first time..."]; Pause[2]; dynamicDefinitions[f[xp]] = xp^2) ?dynamicDefinitions Global`dynamicDefinitions Attributes[dynamicDefinitions] = {HoldAll} dynamicDefinitions[f[1]] = 1 Clear[dynamicDefinitions] f[1] evaluating for the first time... 1 In this approach, dynamically defined values are stored as DownValues of a special function, dynamicDefinitions, which I can then simply Clear when I want to remove all dynamic values, without affecting the principal definitions of f. This seems like a reasonable approach. But I was just wondering if there is maybe another, "standard" way of doing this that I am not aware of, or if you see a major flaw with this method which I can't see? Cheers, Peter -- Paul Abbott Phone: +61 8 6488 2734 School of Physics, M013 Fax: +61 8 6488 1014 The University of Western Australia (CRICOS Provider No 00126G) AUSTRALIA http://physics.uwa.edu.au/~paul http://InternationalMathematicaSymposium.org/IMS2005/