Functional programming 使用Ocaml中的fold函数将二叉树转换为列表

Functional programming 使用Ocaml中的fold函数将二叉树转换为列表,functional-programming,ocaml,binary-tree,fold,Functional Programming,Ocaml,Binary Tree,Fold,鉴于: 使用: 将二叉树转换为列表。 例如 tree2列出一些树给出了[1;2;3] 我的尝试: let someTree = Node (1,Node(2,Node(3,Empty,Empty),Empty),Empty) 它给出了错误: let tree2list tr = match tr with | Empty -> Empty | Node (x,l,r) -> (tree_fold (fun acc tree-> tree::acc) [] tr) 我

鉴于:

使用:

将二叉树转换为列表。 例如

tree2列出一些树
给出了
[1;2;3]

我的尝试:

let someTree = Node (1,Node(2,Node(3,Empty,Empty),Empty),Empty)
它给出了错误:

let tree2list  tr = match tr with
 | Empty -> Empty
 | Node (x,l,r) ->  (tree_fold (fun acc tree-> tree::acc) [] tr)
我已经做了好几个小时了,并且不断地犯类似的错误。任何帮助都将不胜感激,哪怕只是一个小小的暗示也会很好


谢谢。

您应该传递到
树的函数接受三个参数,而您传递的函数只能接受两个参数。这就是编译器试图说的。当然,还有其他一些问题,但我希望你能解决它们

let someTree = Node (1,Node(2,Node(3,Empty,Empty),Empty),Empty)
let tree2list  tr = match tr with
 | Empty -> Empty
 | Node (x,l,r) ->  (tree_fold (fun acc tree-> tree::acc) [] tr)
This expression has type 'a list but an expression was expected of type 'b -> 'b .