Raul wrote: " http://weblambdazero.blogspot.com/2010/07/advanced-recursion-in-newlisp.html looks like it is describing this:
memoize=: M. " Yes; however, a trampoline function was defined further down. In any case, this is not very relevant now because⦠Raul wrote: " I should also add an implementation of the "tco" at the very bottom⦠" These contributions are very much appreciated. Thank you! " Raul also wrote: " p.s. you can claim that you know J very well. ;) " Thank you for the compliment but there are many J topics, even related to the core language, where I could learn a lot (to put it mildly) by reading carefully the dictionary and the vocabularies. I think I know pretty well how to build tacit expressions yet, among others, I often miss key (/.) solutions :) On Tue, Aug 26, 2014 at 1:14 PM, Raul Miller <[email protected]> wrote: > I should also add an implementation of the "tco" at the very bottom of that > post: > > tco=:(0 :0)(2 :0) > : > context=. cocreate'' NB. context > active__context=: 0 > accumulated__context=: '' > v 2 :m context > ) > : > accumulated__n=: x,&<y > if. 0=active__n do. > active__n=: 1 > while. #accumulated__n do. > pair=. accumulated__n > accumulated__n=:'' > value__n=: u&>/pair > end. > active__n=. 0 > value__n > end. > ) > > sum=: (4 :0) tco > if. y>0 do. > (x + 1) sum y-1 > else. > x > end. > ) > > > 1 sum 10000 > 10001 > > Coding for tail call optimization gives you the opportunity to debug > infinite loops when you make mistakes. > > Thanks, > > -- > Raul > > > On Tue, Aug 26, 2014 at 12:05 PM, Raul Miller <[email protected]> > wrote: > > > P.S. example use: > > > > trampoline 3 peano 5 > > 8 > > > > Thanks, > > > > -- > > Raul > > > > > > > > On Tue, Aug 26, 2014 at 12:04 PM, Raul Miller <[email protected]> > > wrote: > > > >> (I thought I sent this message, this morning, but I see that it has not > >> yet been sent. I have been having this happen a lot recently. I have a > >> hunch about what is happening, but for now I'll just note that I am > having > >> this issue, and I apologize if it seems I am ignoring anyone.) > >> > >> -------------------------------------------------------- > >> > >> Maybe like this: > >> > >> trampoline=:3 :0 > >> try. > >> while. 1 do. > >> y=. y`:6'' > >> end. > >> catch. > >> y > >> end. > >> ) > >> > >> peano=:4 :0 > >> if. 0=y do. x return. end. > >> op=. <@,&< > >> noun=. '0' op ] > >> const=. '"' op (noun _),~ noun > >> (const x+1)`peano`(const y-1) > >> ) > >> > >> Note that if you instead define op, noun and const globally you should > >> rename 'noun' so it does not conflict with the existing definition for > that > >> name. > >> > >> op is a utility gerund construction mechanism. > >> noun constructs a noun gerund from a value > >> const constructs a constant verb gerund from a value > >> > >> I hope that's clear enough? > >> > >> Thanks, > >> > >> -- > >> Raul > >> > >> > >> > >> On Tue, Aug 26, 2014 at 6:10 AM, Joe Bogner <[email protected]> > wrote: > >> > >>> On Mon, Aug 25, 2014 at 9:51 PM, Raul Miller <[email protected]> > >>> wrote: > >>> > > >>> > http://www.integralist.co.uk/posts/understanding-recursion-in-functional-javascript-programming/#the-solution > >>> > looks like it is describing this: > >>> > > >>> > trampoline=:3 :0 > >>> > try. > >>> > while. 1 do. > >>> > y=. y`:6'' > >>> > end. > >>> > catch. > >>> > y > >>> > end. > >>> > ) > >>> > > >>> > >>> The linked url includes a sum function that is applied against the > >>> trampoline. How would that be done in J? I tried some things and could > >>> not figure out how to bind the x/y to the gerund, which is what I > >>> assumed I needed to do > >>> > >>> Don't run this code as it will crash J > >>> > >>> trampoline=:3 :0 > >>> try. > >>> while. 1 do. > >>> y=. y`:6'' > >>> end. > >>> catch. > >>> y > >>> end. > >>> ) > >>> > >>> NB. warning, crashes J > >>> recur=: 4 : 0 > >>> if. y > 0 > >>> do. trampoline recur&(y+1)`'' > >>> else. x > >>> end. > >>> ) > >>> > >>> sum=: 4 : 0 > >>> trampoline (x recur y) > >>> ) > >>> ---------------------------------------------------------------------- > >>> For information about J forums see http://www.jsoftware.com/forums.htm > >>> > >> > >> > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
