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

发布于 2025-01-17 19:58:42 字数 391 浏览 0 评论 0原文

该代码运行良好,但是当我尝试示例时,我的结果错误。问题是我的示例中的这部分:[-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

The code is working well, but I got a wrong result when I try it for my example. The problem is this part in my example : [-9..10]. This columns avarage is 0.5, but I got 0 when I test it. The haskell use the empty list match pattern for this example, but I do not know why. How can I fix this ?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓬勃野心 2025-01-24 19:58:42

haskell 在这个例子中使用空列表匹配模式,但我不知道为什么。我该如何解决这个问题?

您每次都使用列表的尾部xs 进行递归调用。最终,您将使用空列表调用 coldestAvg,并且由于 0 是本例中所有平均值中最小的,因此它将返回 0 >。

您不应该定义这样的基本情况:空列表没有最小值。对于包含一个元素的列表,您返回平均值,因此:

coldestAvg :: [[Double]] -> Double
coldestAvg [x] = listAvg x
coldestAvg (x:xs) =  min (listAvg x) (coldestAvg xs)

The haskell use the empty list match pattern for this example, but I do not know why. How can I fix this ?

You each time make a recursive call with the tail xs of the list. Eventually you will thus call coldestAvg with the empty list, and since 0 is the smallest of all the averages in this case, it will thus return 0.

You should not define such base case: there is no minimum for an empty list. For a list with one element, you return the average, so:

coldestAvg :: [[Double]] -> Double
coldestAvg [x] = listAvg x
coldestAvg (x:xs) =  min (listAvg x) (coldestAvg xs)
北笙凉宸 2025-01-24 19:58:42

您需要将ColdestAvg [] = 0更改为coldestavg [] = 1/0

You need to change coldestAvg [] = 0 to coldestAvg [] = 1/0

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文