gpt4 book ai didi

list - Haskell 列表中的模式匹配失败

转载 作者:行者123 更新时间:2023-12-01 08:13:53 24 4
gpt4 key购买 nike

我刚开始使用 Haskell 时偶然发现了一个问题。根据 Haskell 的说法,我有一个模式匹配失败,但我看不出如何。这是我尝试执行的代码:

statistics ::   [Int] -> (Int, Int, Int)
statistics [gradelist] = ( amountParticipants, average, amountInsufficient)
where
amountParticipants= length [gradelist]
average= sum[gradelist] `div` amountParticipants
amountInsufficient= length [number| number<- [gradelist], number<6]

我称“统计”为:

statistics[4,6,4,6]

这会导致模式匹配失败,而我希望看到:(4, 5, 2)

statistics[6]

给出答案:( 1, 6, 0 )(正确)。有人能告诉我为什么我的第一个电话会导致这种模式匹配吗?因为我很确定我会给出一个列表作为参数

最佳答案

如果您编写 statistics [gradelist] = ...,您将针对包含称为 gradelist 的唯一元素的 singleton 列表进行模式匹配>。因此,您的函数仅针对长度恰好为 1 的列表定义(例如 [6]);对于空列表 ([]) 或包含两个或多个元素的列表(例如 [4,6,4,6]),它是未定义的。

你的函数的正确版本应该是

statistics :: [Int]     -> (Int, Int, Int)
statistics gradelist = (amountParticipants, average, amountInsufficient)
where
amountParticipants = length gradelist
average = sum gradelist `div` amountParticipants
amountInsufficient = length [number| number <- gradelist, number < 6]

正如@thoferon 所说,您还需要对 gradelist 为空的情况进行特殊安排,以避免在计算 average 时被零除。

关于list - Haskell 列表中的模式匹配失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15638715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com