Tree 在ocaml中映射树和折叠树

Tree 在ocaml中映射树和折叠树,tree,ocaml,fold,Tree,Ocaml,Fold,我有以下类型的树 type 'a tree = | Leaf of 'a | Node of 'a * ('a tree) * ('a tree);; 我还有两个函数fold_树和map_树,如下所示: let rec map_tree f t= match t with | Leaf v -> Leaf (f v) | Node(a,lt,rt) -> Node(f a,map_tree f lt, map_tree f rt);; l

我有以下类型的树

type 'a tree = 
    | Leaf of 'a
    | Node of 'a * ('a tree) * ('a tree);;
我还有两个函数fold_树和map_树,如下所示:

let rec map_tree f t=
    match t with
    | Leaf v -> Leaf (f v)
    | Node(a,lt,rt) -> Node(f a,map_tree f lt, map_tree f rt);;

let rec fold_tree f1 f2 t =
    match t with
    | Leaf v -> f1 v
    | Node(a,lt,rt) -> f2 a (fold_tree f1 f2 lt) (fold_tree f1 f2 rt);;
是否可以使用折叠树实现映射树

let map_by_fold f t = 
   let f1 x = Leaf (f x) in
   let f2 x l r = Node (f x, l, r) in
   fold_tree f1 f2 t;;
例如:

# let a = Node(10, Node (2, (Leaf 1), (Leaf 4)), Leaf 8);;
val a : int tree = Node (10, Node (2, Leaf 1, Leaf 4), Leaf 8)

# map_by_fold (fun x->2*x) a;;
- : int tree = Node (20, Node (4, Leaf 2, Leaf 8), Leaf 16)
例如:

# let a = Node(10, Node (2, (Leaf 1), (Leaf 4)), Leaf 8);;
val a : int tree = Node (10, Node (2, Leaf 1, Leaf 4), Leaf 8)

# map_by_fold (fun x->2*x) a;;
- : int tree = Node (20, Node (4, Leaf 2, Leaf 8), Leaf 16)

这有家庭作业问题的味道,你所给出的只是问题的陈述。仅仅给出一个肯定/否定的答案,或者展示如何去做(如果可能的话),似乎没有什么帮助。但也许你可以这样想。映射创建某个对象的副本,其中每个部分都经过特定函数的处理。折叠在有序地穿过某物的所有部分时会产生任意结果。任意结果是否可以是包含修改部分的副本


为了得到更好的帮助,你应该展示你自己的一些推理、代码等。

这有家庭作业问题的味道,你所给出的只是问题的陈述。仅仅给出一个肯定/否定的答案,或者展示如何去做(如果可能的话),似乎没有什么帮助。但也许你可以这样想。映射创建某个对象的副本,其中每个部分都经过特定函数的处理。折叠在有序地穿过某物的所有部分时会产生任意结果。任意结果是否可以是包含修改部分的副本

为了得到更好的帮助,你应该展示你自己的一些推理、代码等