我看一下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 -> ...)
答案 0 :(得分:2)
我不确定你在哪里找到Module.Map
,也许这是你作业的一部分?所以,我认为,您正在谈论OCaml标准模块Map
。
OCaml中的地图使用平衡二叉树实现。树本身没有顺序,因为它们的结构根据定义不是线性的。虽然,它们可以按指定的顺序遍历。但可以根据键比较功能指定排序。这可能是一些任意的顺序。
鉴于上述情况,您应该已经知道,不可能反转树。您只能以相反的方向遍历它。这意味着,如果你想以升序访问所有节点,你需要先去左边一个节点,如果你想按降序遍历,你的迭代函数应首先访问正确的节点。