连接三元树中的列表

时间:2010-06-22 11:00:05

标签: haskell

我正在创建一个使用累加器连接列表的三元树的函数。

 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'

2 个答案:

答案 0 :(得分:6)

($)的左侧必须是一个函数(即类型a -> b),xs显然不是。请记住($)的定义是

f $ x = f x

一般来说是括号的替代。可能你想要

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

代替。

(请注意,这不是尾递归。)

答案 1 :(得分:0)

Kenny回答的一小部分内容:

  

前奏> :t($)

     

($)::(a - > b) - > a - > B'/ P>