Hi Fred, maybe I understood but I expected the control was returned to caller when the m=0 condition was met and not before.
If I look better at the program... i can understand that after all the "ack" evaluation the program must exit... but in my case was performing the n-increment. This could be the reason... even if I'm not still sure about it :-) thanks again, Fausto 2015-04-16 0:01 GMT+02:00 Frederick H. Pitts <fred.pi...@comcast.net>: > On Wed, 2015-04-15 at 23:24 +0200, Fausto Saporito wrote: > Hello Fausto, > > Because during the recursion each time > (m - 1) ack ( m ack (n - 1)) > is evaluated, control (with the intermediate result) must be returned to > the caller of ack (which will be ack itself except for the initial call > to ack), and not fall through to the statement following the above > expression. The latter statement increments n which prevents the > recursion from terminating properly. > > The above explanation is not particularly eloquent, but I hope you > get > the gist of what I'm trying to say. > > Regards, > > Fred > > > Hi Fred, > > > > > > thanks a lot. > > > > Now it works... but (maybe it's a stupid question) why that > > change? :-) > > > > > > regards, > > > > Fausto > > > > > > > > 2015-04-15 22:37 GMT+02:00 Frederick H. Pitts > > <fred.pi...@comcast.net>: > > Fausto, > > > > Try changing the fourth line to > > > > z←(m-1) ack (m ack (n-1))⋄ →0 > > > > Regards, > > > > Fred > > > > On Wed, 2015-04-15 at 21:03 +0200, Fausto Saporito wrote: > > > Hello all, > > > > > > > > > I'm trying to implement ackerman function, but I got no > > luck ... and I > > > cannot understand why this code doesn't work: > > > > > > z←m ack n > > > →(m=0)/∆1 > > > →(n=0)/∆2 > > > z←(m-1) ack (m ack (n-1)) > > > ∆1: z←n+1 ⋄ →0 > > > ∆2: z←(m-1) ack 1 > > > > > > > > > is the double recursion permitted in APL2 ? > > > > > > > > > thanks, > > > > > > fausto > > > > > > > > > > > > > > > > > > >