我是OCaml的新手,我正在尝试将StringMap转换为OCaml中的List。
地图是先前从列表中生成的。
let map = List.fold_left(<SOME CODE HERE, WHICH I AM OMITTING>
) StringMap.empty
in StringMap.fold(fun w c newlist -> (c,w)::newlist) map[]
上面代码中的最后一行给出了以下错误: 该表达式的类型为StringMap.key list - &gt; int StringMap.t 但预计会有类型的表达 &#39;一个StringMap.t =&#39;一个Map.Make(String).t
请注意:此代码输入到ocamllex文件(.mll)中,当我尝试执行生成的词法分析器(.ml)文件时出现此错误。
为什么我收到此错误?如何让我的代码工作?
谢谢!
答案 0 :(得分:1)
错误告诉您map
值的类型为StringMap.key list -> int StringMap.t
,这意味着它是一个函数,而不是您预期的映射。此外,函数签名会告诉您前一个表达式中缺少的内容,以获得预期的int StringMap.t
:您需要在List.fold_left
类型StringMap.key list
的调用中添加参数,我想这是一个string list
:
let map = List.fold_left(<SOME CODE HERE, WHICH I AM OMITTING>
) StringMap.empty string_list
string_list
是缺少的参数:用于构建地图的密钥列表。
答案 1 :(得分:1)
StringMap.bindings
将返回(key, value)
对的列表。