Re: Recursion inspection technique : HoldForm but release variables
- To: mathgroup at smc.vnet.net
- Subject: [mg66420] Re: Recursion inspection technique : HoldForm but release variables
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Thu, 11 May 2006 05:36:25 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <e3um8v$hfr$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
flatmax wrote: > Hi, > > If I define a recursion and hold its form to inspect it : > Clear[test] > test[j_Integer?Positive] := > test[j] = k[j] HoldForm[ test[j - 1] ] > > then This is what happens : > > In[22]:= test[4] > > Out[22]:= test[4 - 1] k[4] > > But I would like it to be with the variable evaluated : > > Out[22]:= test[3] k[4] > > Whats the trick ??? > > thanks > Matt InIn > Hi Matt, Use *ReleaseHold* [1] (see In[5]) to go step by step or a transformation rule applied repeatedly (*ReplaceRepeated* or //., not /.) [2] to release all the *HoldForm* {see In[6]). In[1]:= Clear[test]; test[0] = 1; test[(j_Integer)?Positive] := test[j] = k[j]*HoldForm[test[j - 1]] In[4]:= test[4] Out[4]= test[4-1] k[4] In[5]:= ReleaseHold[%] Out[5]= test[3-1] k[3] k[4] In[6]:= test[4] //. HoldForm[x_] :> ReleaseHold[HoldForm[x]] Out[6]= k[1] k[2] k[3] k[4] Best regards, Jean-Marc [1] http://documents.wolfram.com/mathematica/functions/ReleaseHold [2] http://documents.wolfram.com/mathematica/functions/ReplaceRepeated