代碼運行良好,但在我的示例中嘗試時得到了錯誤的結果。問題是我的示例中的這一部分:[-9..10]。此列的平均值為 0.5,但我在測驗時得到了 0。在這個例子中,haskell 使用空串列匹配模式,但我不知道為什么。我怎樣才能解決這個問題 ?
listAvg :: [Double] -> Double
listAvg [] = 0
listAvg x = (sum x)/fromIntegral(length x)
coldestAvg :: [[Double]] -> Double
coldestAvg [] = 0
coldestAvg (x:xs) = min (listAvg x) (coldestAvg xs)
Example :
coldestAvg [[12,13],[-9..10]] == 0.5
uj5u.com熱心網友回復:
在這個例子中,haskell 使用空串列匹配模式,但我不知道為什么。我怎樣才能解決這個問題 ?
您每次都使用xs串列的尾部進行遞回呼叫。最終,您將coldestAvg使用空串列進行呼叫,并且由于0在這種情況下它是所有平均值中最小的,因此它將回傳0。
您不應該定義這樣的基本情況:空串列沒有最小值。對于具有一個元素的串列,您回傳平均值,因此:
coldestAvg :: [[Double]] -> Double
coldestAvg [x] = listAvg x
coldestAvg (x:xs) = min (listAvg x) (coldestAvg xs)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/452944.html
