gpt4 book ai didi

algorithm - 给定一个列表列表,返回一个具有列表长度的列表(在另一个列表中)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:42:36 26 4
gpt4 key购买 nike

当我尝试运行以下函数时,出现错误:

len' [] = 0
len' (_:xs) = 1 + len' xs

listlon [] = 0
listlon [[]] = 1
listlon (x:xs) = ((len' x):(listlon xs))

functions.hs:41:1: error: • Non type-variable argument in the constraint: Num [a] (Use FlexibleContexts to permit this) • When checking the inferred type listlon :: forall a t. (Num [a], Num a) => [[t]] -> [a]

谁能解释一下,如何解决这个问题?这个错误究竟传达了什么?

最佳答案

线

listlon [] = 0

产生输出 0 代替类型 [a]。您很可能是指 liSTLon [] = []。不过我建议使用 liSTLon = map lengthliSTLon = map len'。或者也许我只是不明白你真正想要的是什么。作为第一步,提供预期的签名总是有帮助的。您是否正在寻找函数 liSTLon::[[a]] -> [Int]

如果我的理解是正确的,最直接的解决方法是:

listlon [] = []
listlon [x] = [len' x]
listlon (x:xs) = len' x : listlon xs

这修复了类型。但是你可以注意到第二个等式是多余的,这就足够了

listlon [] = []
listlon (x:xs) = len' x : listlon xs

现在您可以注意到这实际上是在列表上映射 len',因此 map len' 作为 liSTLon 的无点定义>.

错误表明编译器对返回类型感到困惑。您正在尝试通过文字 01 以及列表形式(由最后一行构造)返回 Num。约束 Num [a] 只能使用扩展 FlexibleContexts。但实际上它只是说明了我上面描述的问题。这些类型的错误消息有时会令人困惑,因为编译器无法读懂您的想法,因此它假定您知道自己在做什么,并且仅在由于某些冲突而无法继续推断类型时才报告问题。

关于algorithm - 给定一个列表列表,返回一个具有列表长度的列表(在另一个列表中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43144712/

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