【发布时间】:2021-12-22 09:01:09
【问题描述】:
编写
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' 错误。我也认为我的递归没有正确实现。
【问题讨论】:
-
提示:连接列表中的项目。
-
/ 谁是设计这些绝对密集示例的滥用者? / Haskell 中的函数调用语法是
(foo arg),而不是arg(foo)。