繁体   English   中英

如何修复我的 haskell 代码以适用于我的示例?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM