gpt4 book ai didi

hash - if 语句的 Ocaml 错误

转载 作者:行者123 更新时间:2023-12-04 22:23:49 25 4
gpt4 key购买 nike

我有一个列表列表,例如 [[1;2;3];[2];[3;4;5;6]; [7;8;9;10]
我想将这些放在 Hashtbl 中,其中键是列表的长度,值是列表的列表,其中包含给定长度的所有子列表。

因此,对于上面的示例,哈希将如下所示

Key            Value
1 [[2]]
3 [[1;2;3]]
4 [[3;4;5;6];[7;8;9;10]]

此外,我还试图跟踪最长列表的长度,该数字是函数返回的

执行此操作的代码如下。
let hashify lst =
let hash = Hashtbl.create 123456 in
let rec collector curmax lst =
match lst with
[] -> curmax
| h::t -> let len = (List.length h) in
(if ((Hashtbl.mem hash len)=true)
then ( let v = (Hashtbl.find hash len) in Hashtbl.add hash len v@[h] ) (* Line 660 *)
else ( Hashtbl.add hash len [h]));

(collector (max len curmax) t)
in
collector 0 lst
;;

现在,当我这样做时,上面的代码出现以下错误
File "all_code.ml", line 600, characters 50-72:
Error: This expression has type unit but an expression was expected of type
'a list

为什么 Ocaml 需要一个“列表”的返回类型,我该如何解决这个问题。
提前致谢
普尼特

最佳答案

您可能应该在 (v@[h]) 中添加括号以避免将其解析为 (Hashtbl.add hash len v)@[h]
你可能不应该将 123456 传递给 Hashtbl.create 而是一个合理的质数,比如 307 或 2017

关于hash - if 语句的 Ocaml 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9306327/

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