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