scanl f z [x1, x2, ...] == [z, z `f` x1, (z `f` x1) `f` x2, ...]Note that
last (scanl f z xs) == foldl f z xs
>>> scanl (+) 0 [1..4] [0,1,3,6,10]
>>> scanl (+) 42 [] [42]
>>> scanl (-) 100 [1..4] [100,99,97,94,90]
>>> scanl (\reversedString nextChar -> nextChar : reversedString) "foo" ['a', 'b', 'c', 'd'] ["foo","afoo","bafoo","cbafoo","dcbafoo"]
>>> take 10 (scanl (+) 0 [1..]) [0,1,3,6,10,15,21,28,36,45]
>>> take 1 (scanl undefined 'a' undefined) "a"
scanl f z [x1, x2, ...] == [z, z `f` x1, (z `f` x1) `f` x2, ...]Note that
last (scanl f z xs) == foldl f z xs
>>> scanl (+) 0 [1..4] [0,1,3,6,10] >>> scanl (+) 42 [] [42] >>> scanl (-) 100 [1..4] [100,99,97,94,90] >>> scanl (\reversedString nextChar -> nextChar : reversedString) "foo" ['a', 'b', 'c', 'd'] ["foo","afoo","bafoo","cbafoo","dcbafoo"] >>> scanl (+) 0 [1..] * Hangs forever *
scanl f z [x1, x2, ...] == [z, z `f` x1, (z `f` x1) `f` x2, ...]Note that
last (scanl f z xs) == foldl f z xs
>>> scanl (+) 0 [1..4] [0,1,3,6,10] >>> scanl (+) 42 [] [42] >>> scanl (-) 100 [1..4] [100,99,97,94,90] >>> scanl (\reversedString nextChar -> nextChar : reversedString) "foo" ['a', 'b', 'c', 'd'] ["foo","afoo","bafoo","cbafoo","dcbafoo"] >>> take 10 (scanl (+) 0 [1..]) [0,1,3,6,10,15,21,28,36,45] >>> take 1 (scanl undefined 'a' undefined) "a"
scanl f z <x1,...,xn> = <y1,...,y(n+1)> where y1 = z yi = f y(i-1) x(i-1)Example: scanl (+) 0 <1,2,3,4> = <0,1,3,6,10>
scanl f z <x1,...,xn> = <y1,...,y(n+1)> where y1 = z yi = f y(i-1) x(i-1)Example: scanl (+) 0 <1,2,3,4> = <0,1,3,6,10>
scanl f z <x1,...,xn> = <y1,...,y(n+1)> where y1 = z yi = f y(i-1) x(i-1)Example: scanl (+) 0 <1,2,3,4> = <0,1,3,6,10>
scanl f z <x1,...,xn> = <y1,...,y(n+1)> where y1 = z yi = f y(i-1) x(i-1)Example: scanl (+) 0 <1,2,3,4> = <0,1,3,6,10>