gpt4 book ai didi

ocaml - 在OCaml中添加到字符串映射

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

我一直在试图弄清楚我认为是一个非常简单的任务,即从函数内部将条目添加到OCaml中的字符串映射中。相关元素如下:

module StringMap = Map.Make (String);;
let m = StringMap.empty;;

let rec count ke = match ke with
|[] -> []
|hd::tl -> begin let m = StringMap.add hd 1 m; [hd] @ count tl end;;

我一直收到神秘的“语法错误”消息,但是即使将代码分解为几乎没有内容后,我仍未找到解决方案。我可以使用单个命令将其添加到字符串映射中,但是如果我尝试从函数内部运行 let m = StringMap.add hd 1 m,它将无法运行。我敢肯定这是一个简单的问题,但是有人可以帮忙吗?谢谢。

最佳答案

您的代码似乎存在一些问题。但是首先,这是一个有关如何执行您要执行的操作的示例:

module StringMap = Map.Make (String)

let rec count m ke =
match ke with
| [] -> m
| hd :: tl -> count (StringMap.add hd 1 m) tl

let m = count StringMap.empty ["foo"; "bar"; "baz"]

对原始代码的一些注释:
  • 双分号用于告诉REPL循环您希望它使用您的代码。如果不使用它们,则应避免使用它们。
  • 单分号用于分隔命令式表达式,例如跟随一个任务。在这里,您有一个let表达式,其语法为“let <..> in <..>”,因此在分号后使用是错误的。 (“let a = ...”(不带“in”)是顶级构造,而不是您可以在本地使用的东西)。
  • StringMap(以及ocaml中的大多数其他结构)是功能性的,而非强制性的。您不能更改第一行中声明的“m”。您必须构建结构,最后在循环末尾返回完整构建的结构。
  • 关于ocaml - 在OCaml中添加到字符串映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3878527/

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