我试图在OCaml中的任意树上编写方法。下面是我的树构造函数: | Leaf of 'a我对fold_tree有意见
let rec fold_treeFor example, fold_tree sum (fun x -> x) (node [node [leaf 7; leaf 8]; leaf 9])=24
正如你可能知道的,OCaml中有更高阶的函数,如fold_left,fold_right,filter等。在我的函数式编程课程中,我介绍了一个名为fold_tree的函数,它类似于fold_left/right,不是在列表上,而是在(二进制)树上。它看起来是这样的: match t with Node (l, x, r)
value: A, left: Tree[A], right: Tree[A]) extends Tree[A]def fold_tree[A,B](f1: A => B)(f2: (A: Tree[A]): B = t match { case Node(value, l, r) => f2(value, fold_tree(f1)(f2)(l), fold_tree(f1)(f2)(r)) //post or