我必須定義一個highestAverage :: [[Int]] -> Double函式,該函式從包含數字的串列串列中回傳最高平均值。
例如:
bestAverage [[3,1], [5,4,3], [], [5,5,5], [1,2,3]] == 5.0
我已經撰寫了一個回傳串列平均值的函式。
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)
uj5u.com熱心網友回復:
對于非空串列,您groupAvg在第一個子串列上呼叫x,然后確定該max值與串列尾部的遞回呼叫之間的 。基本情況是我們計算最大值的單個子串列:
highestAverage :: [[Int]] -> Double
highestAverage [x] = listAverage x
highestAverage (x:xs) = max (listAverage x) (highestAverage xs)
此函式不適用于空串列。如果要回傳0空串列,可以將基本情況更改為:
highestAverage :: [[Int]] -> Double
highestAverage [] = 0
highestAverage (x:xs) = max (listAverage x) (highestAverage xs)
uj5u.com熱心網友回復:
您可以簡單地將您的函式映射到串列上并取最大值:
最大值 $ map listAverage [[3,1], [5,4,3], [], [5,5,5], [1,2,3]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/351690.html
