These last posts cleared it up. Thanks. Which remind me, I think one of the SICP lectures on youtube mentions tail calls to *other* functions, which I totally forgot, with an example of a person doing something for another doing something for another... and the last one just gives the result to the first. That ain't no internal loop.
On Jan 26, 1:23 pm, Laurent PETIT <[email protected]> wrote: > 2011/1/26 Alan <[email protected]>: > > > Now try writing two mutually-recursive functions. In Scheme (as I > > understand it) that will get optimized into a jump from one function > > to the other, while in Clojure it will use the stack. > > And that's why Rich introduced clojure.core/trampoline. > > Cheers, > > -- > Laurent > > > > > > > On Jan 26, 1:10 pm, Armando Blancas <[email protected]> wrote: > >> From SICP: "With a tail-recursive implementation, iteration can be > >> expressed using the ordinary procedure call mechanism". As I > >> understand this, a tail call is a loop with functional notation but > >> not actually a function call. That's why I find this issue difficult > >> to follow, since loops are internal details of a function/method and > >> don't get involved with calls, stack frames, access security, or how > >> the jit-compiled code may or may not be optimized. So there's > >> something key here that I'm missing. > > >> In a little project of mine I plan on doing this (hand-coded with ASM > >> as my compiler doesn't do TCO yet). That seems to work but I wonder > >> what issues may come up. > > >> int fact(int n, int r) { > >> if (n == 0) return r; > >> else return fact(n-1, n*r);} > > >> 0: iload_0 > >> 1: ifne 6 > >> 4: iload_1 > >> 5: ireturn > >> 6: iload_0 > >> 7: istore_2 // temp for n > >> 8: iload_2 > >> 9: iconst_1 > >> 10: isub > >> 11: istore_0 > >> 12: iload_2 > >> 13: iload_1 > >> 14: imul > >> 15: istore_1 > >> 16: goto 0 > > >> On Jan 26, 11:20 am, Luc Prefontaine <[email protected]> > >> wrote: > > >> > From what I recall from a previous thread it would require so much byte > >> > code tweaking that > >> > Hot Spot optimizations would become useless. > > >> > You can search the mailing list, you will find a couple of instructive > >> > discussions > >> > about this. > > >> > Luc P. > > >> > On Wed, 26 Jan 2011 10:01:04 -0800 > > >> > Raoul Duke <[email protected]> wrote: > >> > > On Wed, Jan 26, 2011 at 7:41 AM, Michael Gardner > >> > > <[email protected]> wrote: > >> > > > However, the JVM does not support tail-call optimization. > >> > > > Apparently Clojure can't support implicit TCO without support from > >> > > > the JVM > > >> > > always wondered about that also wrt scala etc., am under the > >> > > impression that it is implementable, but it would be too slow? > > >> > -- > >> > Luc P. > > >> > ================ > >> > The rabid Muppet > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to [email protected] > > Note that posts from new members are moderated - please be patient with > > your first post. > > To unsubscribe from this group, send email to > > [email protected] > > For more options, visit this group at > >http://groups.google.com/group/clojure?hl=en- Hide quoted text - > > - Show quoted text - -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en
