-----Ursprüngliche Nachricht-----
Von: Bruno Schneider 
Gesendet: 24.03.2010 13:56:32
An: hugs-users@haskell.org
Betreff: Re: [Hugs-users] stack overflow in tail recursive function

>On Wed, Mar 24, 2010 at 7:27 AM, Daniel Fischer wrote:
>[...]
>>
>> and this expression is only evaluated if necessary. factorial 20000 builds a 
>> thunk of 20000 nested multiplications, this is tried to evaluate when the 
>> value is demanded for printing, but the expression is too deeply nested to 
>> fit on the stack.
>>
>
>So it goes to the stack, hum? It thought it would be just a pointer to
>some computation type on the heap.


Well, the thunk is built on the heap, that's correct, but when it's evaluated, 
things go on the stack.

>
>Anyway, thanks for the detailed answer. I asked here because I didn't
>test that code on any other compiler/interpreter, so it could be
>something related to hugs implementation.
>

That's okay, but as a rule of thumb, if you don't know that it's
implementation-specific, haskell-cafe or beginners (depending on what
sort of answer you want) is the better choice; hugs-users or
glasgow-haskell-users are less frequented.

In this case, the behaviour is a little implementation-dependent, if you use 
GHC and compile with optimisations, 
the
strictness-analyser should see that the result of the multiplication is
needed and the compiler should make it strict by itself.
(I currently have no access to a computer with GHC installed, so I can't check 
that it does indeed.) 

>
>-- 
>Bruno Schneider
>http://www.dcc.ufla.br/~bruno/

Cheers,
Daniel
_______________________________________________
Hugs-Users mailing list
Hugs-Users@haskell.org
http://www.haskell.org/mailman/listinfo/hugs-users

Reply via email to