在Module.Map中反转

时间:2015-02-10 10:33:09

标签: module ocaml reverse

我看一下Module.Map,我想知道是否有任何函数定义了反向映射。

val rev : 'a t -> 'a t

我试图建立一个

val fold_left_map:(key -> 'a -> 'b -> 'a) -> 'a -> 'b map -> 'a

let rec fold_left_map f value map =
    match map with
    | Empty_map -> value
    | Node_map (left, key, data, right, _) ->
       fold_left_map f (f key (fold_left_map f value right) data) left

当我尝试使用此功能构建rev时,我陷入困境。

let rev map = fold_left_map (function key a x -> ...)

1 个答案:

答案 0 :(得分:2)

我不确定你在哪里找到Module.Map,也许这是你作业的一部分?所以,我认为,您正在谈论OCaml标准模块Map

一般信息

OCaml中的地图使用平衡二叉树实现。树本身没有顺序,因为它们的结构根据定义不是线性的。虽然,它们可以按指定的顺序遍历。但可以根据键比较功能指定排序。这可能是一些任意的顺序。

您的示例

鉴于上述情况,您应该已经知道,不可能反转树。您只能以相反的方向遍历它。这意味着,如果你想以升序访问所有节点,你需要先去左边一个节点,如果你想按降序遍历,你的迭代函数应首先访问正确的节点。