From: jkrzzz@live.com
To: haskell-cafe@haskell.org
Subject: Tail recursive
Date: Wed, 19 Dec 2012 17:07:14 +0100

Hello,

I need a non tail recursive version of scanl, to produce a large enough list of >100K vectors (vectors defined as a list)

I have following code:

scanl'::(a -> a -> a) -> a -> [a] -> [a]
scanl' f q ls      = scanl'' ls (q:[]) where
scanl'' (x:xs) ys = let 
h   = head ys
x'  = f x h
ys' = x':ys
in h `seq` x' `seq` ys' `seq` scanl'' xs ys'
scanl'' [] ys = ys

If I call this function as below I still got stack-overflow error:

head (scanl' (zipWith (+)) ([0,0]) (take 100000 (repeat [0,1])))


What do I wrong. I am not an experienced Haskell programmer, but find the behavior quite unexplainable.

Thank for your answer.

Regards
Jacq