首页 > 解决方案 > 从数字列表中返回加权平均值的函数

问题描述

编写weightedAverage :: [[Int]] -> Double函数,计算成绩的加权平均值。

例如:

weightedAverage [[3], [5]] == 4.0

weightedAverage [[3,3], [5,5]] == 4.0

weightedAverage [[1,5], [5,5]] == 4.0

weightedAverage [[3,3,3,3], [5,5], [5,5]] == 4.0

到目前为止,我设法编写了一个返回列表平均值的函数:

listAverage :: [Int] -> Double
listAverage [] = 0.0
listAverage x = fromIntegral(sum x)/fromIntegral(length x)

我想weightedAverage使用以下代码在我的函数中实现这一点:

weightedAverage [[]] = 0.0
weightedAverage [x] = listAverage x
weightedAverage (x:xs) = (listAverage x + weightedAverage (xs))/fromIntegral length(x:xs)

问题是我得到一个Ambiguous type variable 't0' arising from a use of 'length'错误和一个No instance for (Integral (t0 a0 -> Int)) arising from a use of 'fromIntegral'错误。我也认为我的递归没有正确实现。

标签: haskellrecursionaverage

解决方案



推荐阅读