
Hello, i'd like to write a function that given a list like [1,2,3,4...] returns a list of couple where the first element is the corresponding element of the string, and the second is the sum of the previous elements. An example: input: [1,2,3,4] output: [(1,0)(2,1)(3,3)(4,6)] The problem is that I'd like to use foldl and a solution like: buildCouples = snd . foldl op (0,[]) where op (v,xs) x = (v+x,xs++[(x,v)]) is not good since the operator ++ let the function take 2*n time and not n. Can anyone help me please? Clare -- View this message in context: http://www.nabble.com/Foldl-tf2698202.html#a7524410 Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

zacara:
Hello, i'd like to write a function that given a list like [1,2,3,4...] returns a list of couple where the first element is the corresponding element of the string, and the second is the sum of the previous elements. An example: input: [1,2,3,4] output: [(1,0)(2,1)(3,3)(4,6)]
Looks like a scanl (a prefix fold) -- the "of the previous elements" is a clue that you're describing a scan: Prelude> :t scanl scanl :: (a -> b -> a) -> a -> [b] -> [a] Prelude> scanl (+) 0 [1..4] [0,1,3,6,10] You should be able to work out the rest from here (or rewrite it as a fold). -- Don
participants (2)
-
ClareZako
-
dons@cse.unsw.edu.au