2010-06-22 50 views
1

我正在使用累加器構造一個連接列表三元樹的函數。在三元樹中連接列表

19 data Ttree t = Nil | Node3 t (Ttree t) (Ttree t) (Ttree t) 
20 
21 acc :: Ttree [a] -> [a] 
22 acc tree = acc' tree [] 
23 
24 acc' :: Ttree [a] -> [a] -> [a] 
25 acc' Nil rest = rest 
26 acc' (Node3 xs l m r) rest = 
27  xs $ acc' l $ acc' m $ acc' r rest 

我得到這個錯誤,使用ghc。但我不看到預期類型xs如何是一個 - > B:

e6.hs:26:4: 
    Couldn't match expected type `a -> b' against inferred type `[a1]' 
    In the first argument of `($)', namely `xs' 

回答

6

($)左手側必須是一個函數(即類型a -> b的),其xs顯然不是。還記得($)的定義是

f $ x = f x 

括號的一般替代。可能你想

acc' (Node3 xs l m r) rest = xs ++ (acc' l . acc' m . acc' r) rest 

改爲。

(請注意,這並不是尾遞歸。)

0

小除了肯尼回答:

前奏>:噸($)

($)::(一 - > b) - > a - > b