【发布时间】:2017-01-03 23:20:21
【问题描述】:
我正在尝试为树编写折叠函数:
data BinaryTree a = Leaf
| Node (BinaryTree a) a (BinaryTree a)
deriving (Eq, Ord, Show)
foldTree :: (a -> b -> b) -> b -> BinaryTree a -> b
foldTree _ base Leaf = base
foldTree fn base (Node left a right) = fn a (foldTree fn acc right)
where acc = foldTree fn base left
这段代码几乎可以工作。然而并非总是如此。例如,它不会重建与原始树完全相同的树。
【问题讨论】:
-
你怎么打电话给
foldTree? -
我没有在下面看到的一条评论:而列表上的右折叠使用
(a -> b -> b)类型的组合函数;列表上的 left 折叠使用(a -> b -> a)类型的折叠。
标签: haskell