Re: Self referring function

*To*: mathgroup at smc.vnet.net*Subject*: [mg2426] Re: Self referring function*From*: rubin at msu.edu (Paul A. Rubin)*Date*: Sun, 5 Nov 1995 16:07:01 -0500*Organization*: Michigan State University

In article <479b5h$j5n at ralph.vnet.net>, mvyver at ecel.uwa.edu.au (Mark Van de Vyver) wrote: ->Hi, -> ->I've run into the following weird (well to me at least) function which ->appears in a module. ->I'm still working through Maeder's Programming in MMA (2nd Ed.) and haven't ->seen an explanation/example yet, or I've missed it! -> ->The set up is: -> ->Module[ {input1, input2, a=x[], b=y[]}, -> f[input1_, input2_] := f[input1, input2] = If[input1==c, g[], -> Max[ {a, b}.{f[ input1, input2+1 ], f[ input1+1, input2+1 ->]}, g[] ] ]; -> res=f[0, 0]; -> Clear[ f ]; -> res ]; -> ->I'll point out that everyhting works, but the fact that f[] is defined in ->terms of itself I found a bit weird. ->Could someone point me to a text example that makes the how and why clear? ->In the mean time I'll keep plugging away at Maeder. -> ->Thanks in advance. -> ->Mark -> Mark Van de Vyver ->_________________________________________________________________________ ____ -> Mark Van de Vyver -> Department of Accounting and Finance Phone: (61) (09) 380-2510 -> University of Western Australia Fax: (61) (09) 380-1047 -> Nedlands 6907 e-mail: mvyver at ecel.uwa.edu.au -> Perth ->_________________________________________________________________________ ____ Check out Section 2.4.9 (page 258) in Wolfram's Mathematica book (2nd ed.). The basic idea is that the first time f is called with a particular pair of arguments (say f[a,b]), the SetDelayed part of the definition is invoked, the If[...] expression is evaluated, and f[a,b] is Set to that expression. Thereafter, if f[a,b] is called again (same arguments a and b), instead of recomputing the If[...] expression, Mma will find the result tabulated in memory and will just regurgitate it. The validity of this in your context hinges on the value of f[a,b] always being the same with each evaluation (specifically, c never changing in your case). Paul ************************************************************************** * Paul A. Rubin Phone: (517) 432-3509 * * Department of Management Fax: (517) 432-1111 * * Eli Broad Graduate School of Management Net: RUBIN at MSU.EDU * * Michigan State University * * East Lansing, MI 48824-1122 (USA) * ************************************************************************** Mathematicians are like Frenchmen: whenever you say something to them, they translate it into their own language, and at once it is something entirely different. J. W. v. GOETHE