[英]How can I fix my haskell code to work for my example?
代码运行良好,但在我的示例中尝试时得到了错误的结果。 问题是我示例中的这一部分:[-9..10]。 此列 avarage 为 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
haskell 在这个例子中使用了空列表匹配模式,但我不知道为什么。 我怎样才能解决这个问题?
您每次都使用列表的尾部xs
进行递归调用。 因此,最终您将使用空列表调用coldestAvg
,并且由于在这种情况下0
是所有平均值中最小的,因此它将返回0
。
您不应该定义这样的基本情况:空列表没有最小值。 对于只有一个元素的列表,您返回平均值,因此:
coldestAvg :: [[Double]] -> Double
coldestAvg [x] = listAvg x
coldestAvg (x:xs) = min (listAvg x) (coldestAvg xs)
您需要将coldestAvg [] = 0
更改为coldestAvg [] = 1/0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.