RosettaCodeData/Task/Cumulative-standard-deviation/Haskell/cumulative-standard-deviation-2.hs
2023-07-01 13:44:08 -04:00

18 lines
467 B
Haskell

import Data.List (mapAccumL)
-------------- CUMULATIVE STANDARD DEVIATION -------------
cumulativeStdDevns :: [Float] -> [Float]
cumulativeStdDevns = snd . mapAccumL go (0, 0) . zip [1.0..]
where
go (s, q) (i, x) =
let _s = s + x
_q = q + (x ^ 2)
in ((_s, _q), sqrt ((_q / i) - ((_s / i) ^ 2)))
--------------------------- TEST -------------------------
main :: IO ()
main = mapM_ print $ cumulativeStdDevns [2, 4, 4, 4, 5, 5, 7, 9]