haskell - 从数字列表中返回加权平均值的函数
问题描述
编写
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'
错误。我也认为我的递归没有正确实现。
解决方案
推荐阅读
- python - 非规范化公司名称的 DataFrame [第 1 部分]
- if-statement - ARRAYFORMULA 但仅在行中出现 EMPTY 单元格 - 不起作用
- algorithm - 计算数组的深度
- java - 什么算法可用于以最佳方式在 A1 尺寸的纸张上包装规则形状
- css - 将 CSS box-shadow 应用于 SVG 中的形状而不是矩形 SVG 画布
- java - 如何使用 mouseClicked 从不同的类切换 JPanel?
- javascript - 为什么 javascript fetch() 返回 403 而 python-requests 返回 200?
- laravel - 我似乎无法在供应商包中访问我的身份验证
- javascript - 如何选择具有特定值的所有元素并使用 jquery 更新值
- c# - 如何围绕自身旋转对象?