反转 Module.Map

Reverse in Module.Map

我看了一下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 -> ...)

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

一般信息

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

你的例子

综上所述,你应该已经知道,树的倒转是不可能的。您只能以相反的方向遍历它。这意味着,如果你想按升序访问所有节点,你需要先访问左边的节点,如果你想按降序遍历,你的迭代函数应该先访问右边的节点。