如何在不使用预定义函数的情况下获取列表的平均值?

时间:2016-03-29 12:23:09

标签: haskell

假设我想取一个浮点值列表的平均值,那么在某些时候我需要使用" sum"和"长度" (内置功能)。你能创建一个函数来计算浮点值的任意长度列表的平均值吗?

2 个答案:

答案 0 :(得分:1)

您可以使用snow来构建一个元组,其中包括项目的运行计数以及运行总和,然后除以得到平均值。

foldl'

使用data StrictPair a b = StrictPair !a !b myAvg :: Fractional a => [a] -> a myAvg [] = error "Empty list" myAvg list = let tupleSum (StrictPair count sum) x = StrictPair (count + 1) (sum + x) StrictPair totalCount totalSum = foldl' tupleSum (StrictPair 0 0) list in totalSum / totalCount foldl'强制评估以避免内存问题。 (感谢您的推荐,@ Jubobs,@ Zeta和@dfeuer!)

答案 1 :(得分:1)

不,一般来说这基本上是不可能的。计算数字列表的平均值需要加法和除法。为Rational等标准类型计算这些函数的函数是“内置的”。