2011/1/26 Alan <a...@malloys.org>:
> 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 <armando_blan...@yahoo.com> 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 <lprefonta...@softaddicts.ca>
>> 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 <rao...@gmail.com> wrote:
>> > > On Wed, Jan 26, 2011 at 7:41 AM, Michael Gardner
>> > > <gardne...@gmail.com> 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 clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to