Module 模块中的反向映射

Module 模块中的反向映射,module,ocaml,reverse,Module,Ocaml,Reverse,我查看了模块.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,

我查看了
模块.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 -> ...)

我不知道你在哪里找到了
模块.Map
,也许这是你家庭作业的一部分?所以,我假设您所说的是OCaml标准模块
Map

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

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