2014-10-01 37 views
0

由于采用折叠功能转换二进制树列表:OCaml中

type 'a tree = Empty | Node of 'a * 'a tree * 'a tree 

用途:

let rec tree_fold f e t = match t with 
| Empty -> e 
| Node (x, l, r) -> f x (tree_fold f e l) (tree_fold f e r);; 

一个二叉树转换到一个列表。 示例。

let someTree = Node (1,Node(2,Node(3,Empty,Empty),Empty),Empty) 

tree2list someTree给出[1;2;3]

我尝试:

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 . 

我已经在这几个小时,不断收到类似的错误。任何帮助将非常感激,即使只是一个小提示将是伟大的。

谢谢。

回答

2

您应该传递给tree_fold的函数接受三个参数,并且您传递的函数只能接受两个参数。这正是编译器试图说的。当然,还有其他一些问题,但我希望你能够应付他们!