使用 Haskell,我正在编写一个计算树中叶子总数的函数。我已经将树定义为:
data Tree a = Leaf | Node a (Tree a) (Tree a)
我编写了一个通过以下方式执行此操作的函数:
countL :: Tree a -> Int
countL Leaf = 1
countL (Node x tL tR) = (countL tL) + (countL tR)
这可行,但我想通过使用 fold 函数做同样的事情来更进一步。我通过以下方式定义的树有一个工作折叠功能:
mytFold :: (a -> b -> b -> b) -> b -> Tree a -> b
mytFold f g Leaf = g
mytFold f g (Node a xl xr) = f a (mytFold f g xl) (mytFold f g xr)
我试图包含 fold 函数(也使用了我通过这样做定义的辅助函数:
countL' :: Tree a -> Integer
countL' Leaf = 1
countL' = mytFold leafy 0 where
leafy tL tR = tL + tR
但是我遇到了一些奇怪的错误。有人对出了什么问题有任何见解吗?