如何将StringMap转换为OCaml中的List?

时间:2014-07-18 22:25:30

标签: ocaml ocamllex

我是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)文件时出现此错误。

为什么我收到此错误?如何让我的代码工作?

谢谢!

2 个答案:

答案 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)对的列表。

相关问题