Why this happens?

David Brown haskell at davidb.org
Tue Apr 19 12:25:09 EDT 2005


On Tue, 19 Apr 2005 16:37:13 +0200, Santoemma Enrico  
<Enrico.Santoemma at beta80group.it> wrote:

> I've always thought that compilers for functional languages were able to  
> recognize tail recursion and to transform it into a loop.
> So, why this line eats all my machine's memory (and then runs out of  
> stack space)?
>
> sum [1..10000000]  -- ten millions

The definition of 'sum' in the standard library is too lazy.  Try:

mysum l = sum' l 0
    where
       sum' []     a = a
       sum' (x:xs) a = let s = a+x in s `seq` sum' xs s

Perhaps someone with a better understanding can explain why the 'sum' in  
the library is defined the way it is (the standard defines it based on  
foldl, which is also lazy).  Is there a valid program that can demonstrate  
a difference between 'mysum' and the library's 'sum' function?

Dave


More information about the Glasgow-haskell-users mailing list