gpt4 book ai didi

recursion - 使用递归累积列表时出现类型错误

转载 作者:行者123 更新时间:2023-12-02 10:54:13 24 4
gpt4 key购买 nike

字典是成对的列表。任务是获取字典并返回一对列表:键和值。

我试图在字典上进行迭代(使用递归)并在两个列表中累积键和值,但是我遇到了类型错误,这使我感到困惑。

注意:我不是在寻找该任务的替代解决方案。我想了解该错误以及如何纠正它。

这是代码:

let lists_of_dict dict =
let rec separate dict keys values =
match dict with
[] -> (keys, values)
| (k, v)::t -> separate t k::keys v::values
(* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *)
in
separate dict [] []

(带下划线的部分是第5行的字符19-47)

这是错误消息:
File "lod-problem.ml", line 5, characters 19-47:
Error: This expression has type 'a list
but an expression was expected of type 'b * 'c

我不明白为什么Ocaml会推断出该类型,以及如何使其理解该表达式具有 ('a list * 'b list)类型(如果我没记错的话)。

最佳答案

separate t k::keys v::values解析为(separate t k) :: (keys v) :: values,而不是您期望的separate t (k::keys) (v::values)

因此,OCaml看到您使用::生成了结果,因此结果将成为一个列表(不要介意::的参数也具有错误的类型-类型检查器永远不会走那么远),但预期的结果是一个元组(因为这是第一种情况产生的)。因此,此时类型检查器会出错。

关于recursion - 使用递归累积列表时出现类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39425956/

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