gpt4 book ai didi

haskell - 组合列表和单个项目时出现防护条件错误

转载 作者:行者123 更新时间:2023-12-01 18:44:12 25 4
gpt4 key购买 nike

我试图将列表的头部 (r) 添加到列表 sack 中,但是我不断收到此错误消息。

ERROR "Knapsack.hs":35 - Type error in guarded expression
*** Term : findItems rt (r : sack) (getTotalWeight sack r)
*** Type : [Item]
*** Does not match : [[Item]]

下面列出了代码。

findItems :: [Item] -> [Item] -> Float -> [Item]
findItems (r:rt) sack total
| total > 20 = [sack]
| canContinue = findItems rt (r : sack ) (getTotalWeight sack r)
| otherwise = [sack]
where canContinue = (getTotalWeight sack r) < 20

最佳答案

您无法从 findItems 返回 [sack],因为 sack 已经是 [Item] 类型,所以 [sack] 的类型为 [[Item]]。去掉括号。

消息提示第二情况(它确实返回[Item],因为它应该)的原因可能是(我在这里猜测)Haskell期望所有案例属于同一类型,因此它会检查它们是否与第一个案例属于同一类型,而第一个案例错误地恰好是 [[Item]]。此检查似乎发生在它尝试协调 | 表达式的类型与 findItems 的类型之前。 Haskell 专家可能会在这里纠正我的一些细节:)

关于haskell - 组合列表和单个项目时出现防护条件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10373412/

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