gpt4 book ai didi

haskell - 无法将预期类型 `Int' 与实际类型 [Int] 匹配

转载 作者:行者123 更新时间:2023-12-02 20:54:03 26 4
gpt4 key购买 nike

我正在编写一个程序,对列表中的数字进行求和:

[2,3,4,5] = 14

编译时出现错误,我不知道程序想要什么:

getLimit :: [Int] -> Int
getLimit [] = 0
getLimit [x] = sum [x]
getLimit [y:yz] = y + getLimit yz

错误是:

/image/iqtpk.jpg

感谢您提前提供的任何帮助。

最佳答案

正如评论中提到的,您需要在代码中更改一些内容:

  1. [y:yz] 由于方括号而表示列表的列表。您需要将其替换为括号,使其看起来像 head:tail 模式,如下所示 - (y:yz)
  2. 由于您已经将递归的基本情况定义为 getLimit[] = 0,因此您可以消除对单元素列表的测试,并直接转到所有非空列表的测试,用同样的表达方式。

除此之外,最好使用 foldr,因为这会使您的代码更短,并且具有相同的功能。您可以像这样重写它:

getLimit :: [Int] -> Int
getLimit = foldr (\x acc -> x + acc) 0

至于为什么我推荐 foldr 而不是 foldl',有很好的解释 here .

关于haskell - 无法将预期类型 `Int' 与实际类型 [Int] 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23039192/

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