[Haskell-cafe] a question about *** Exception: stack overflow ..

Luke Palmer lrpalmer at gmail.com
Thu Apr 23 15:06:18 EDT 2009


On Thu, Apr 23, 2009 at 7:02 AM, Mozhgan Kabiri <mozhgan_kch at hotmail.com>wrote:

>  Hi Luck ,
>
> I got you email from the Haskell Cafe list. Hope you don't mind.
> Recently I was running a simple program in Haskell  and keep getting  ***
> Exception: stack overflow  error !
>
> I don't know how to solve it or handle it ! I tried to find the same
> problem on the web in order to get some guide but it wasn't successful.Hope
> you can give me some clue.
>

In the future, why don't you ask this kind of question on haskell-cafe or
haskell-beginners?


>
>
> Here is the code :
>
> import Control.Monad
> import Text.Printf
>
> sumit :: Int -> Int
> sumit n = sumCal 0 n 0 where
> sumCal i n sum | i < n     = sumCal (i+1) n (sum+i)
>                | otherwise = sum
>

This is probably your problem.  If you do tail recursion, it needs to be
strict.  If you don't strictly tail recurse, you end up returning a massive
thunk (i.e. a lazy expression like 0+1+2+3+4+5+6+7+8+9+10+11+12+...) which
needs to be evaluated all in one go, which will overflow your stack.  It is
a little tricky, I know...

sumCal i n sum | i < n = sumCal (i+1) n $! sum+i
               | otherwise = sum

However, there is a function "sum" in the prelude, so you can do this much
more simply:

sumit :: Int -> Int
sumit n = sum [1..n]

:-)

Luke


>
> loopOut :: Int -> IO()
> loopOut n | n <= 1000000
>                  = do
>                    loopIn 0 (1000000000*n) n 0
>                    loopOut (n*10)
>           | otherwise = printf "Done!"
>
>
> loopIn :: Int -> Int -> Int -> Int -> IO()
> loopIn i ub n sum | i < ub
>                          = do
>                            loopIn (i+1) ub n (sumit n)
>                            printf "n=%10d sum=%15d" n sum
>                   | otherwise = printf "\n"
>
> main :: IO ()
> main
>      =do
>      printf "Started .."
>      loopOut 1000
>
> Actually the next step it to parallelize the code with STM.But even at this
> stage it doesn't work ! So, if you can help me with this,I'd be grateful.
>
> Thanks,
> Mozhgan
>
> ------------------------------
> " Upgrade to Internet Explorer 8 Optimised for MSN. " Download Now<http://extras.uk.msn.com/internet-explorer-8/?ocid=T010MSN07A0716U>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090423/609d2fdb/attachment.htm


More information about the Haskell-Cafe mailing list