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