2014-10-01 65 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的函數接受三個參數,並且您傳遞的函數只能接受兩個參數。這正是編譯器試圖說的。當然,還有其他一些問題,但我希望你能夠應付他們!