Haskell实现返回多列表最高平均值的highestAverage函数求助
问题排查
- 类型不匹配错误:代码中
listAverage xs的入参xs类型为[[Int]],但listAverage要求入参为[Int]类型,不符合类型约束,直接导致编译报错。 max函数调用格式错误:Haskell标准库的max为柯里化二元函数,正确调用格式为max a b,传入元组(a,b)的写法不符合函数签名要求。- 边界条件与递归逻辑错误:仅覆盖了输入为
[[]]的场景,未处理空输入、多元素嵌套列表的终止场景,且未实现递归遍历剩余子列表取最高值的逻辑。
正确实现方案
递归实现版本
highestAverage :: [[Int]] -> Double -- 空输入边界处理 highestAverage [] = 0.0 -- 单元素嵌套列表边界处理 highestAverage [x] = listAverage x -- 递归逻辑:当前子列表平均值 与 剩余子列表最高平均值 取最大值 highestAverage (x:xs) = max (listAverage x) (highestAverage xs)
高阶函数简洁实现(Haskell惯用写法)
通过map批量计算所有子列表的平均值,再用maximum取最大值即可,代码更简洁易维护:
highestAverage :: [[Int]] -> Double highestAverage = maximum . map listAverage
两种实现都可通过测试用例验证:highestAverage [[3,1], [5,4,3], [], [5,5,5], [1,2,3]] 输出结果为5.0,符合要求。
内容的提问来源于stack exchange,提问作者BeanieBarrow
相关产品推荐
相关产品推荐

