returns 多个数字列表中的最高平均值的函数

A function that returns the highest average from multiple lists of numbers

我必须定义一个 highestAverage :: [[Int]] -> Double 函数,该函数 returns 包含数字的列表列表中的最高平均值。

例如:

bestAverage [[3,1], [5,4,3], [], [5,5,5], [1,2,3]] == 5.0

我已经写了一个returns列表平均值的函数。

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

我的问题是我想不出一种方法让它进行递归。加载我的模块时总是出错。 我的代码现在看起来像这样:

highestAverage :: [[Int]] -> Double
highestAverage [[]] = 0.0
highestAverage (x:xs) = max(listAverage x, listAverage xs)

对于非空列表,您在第一个子列表 x 上调用 groupAvg,然后确定该值之间的 max,以及对尾部的递归调用名单。基本情况是我们计算最大值的单个子列表:

highestAverage :: [[Int]] -> Double
highestAverage <strong>[x]</strong> = listAverage x
highestAverage (x:xs) = <strong>max (listAverage x) (highestAverage xs)</strong>

此函数不适用于空列表。如果您想 return 0 用于空列表,您可以将基本情况更改为:

highestAverage :: [[Int]] -> Double
highestAverage <strong>[]</strong> = 0
highestAverage (x:xs) = <strong>max (listAverage x) (highestAverage xs)</strong>

您可以简单地将您的函数映射到列表上并取最大值:

最大 $ map listAverage [[3,1], [5,4,3], [], [5,5,5], [1,2,3]]