【发布时间】:2018-04-11 01:36:22
【问题描述】:
我正在网上学习一些旧课程并遇到了这个任务:
data Tree a = Leaf
| Branch a (Tree a) (Tree a)
deriving (Show, Eq)
fold :: (a -> b -> b -> b) -> b -> Tree a -> b
fold _ acc Leaf = acc
fold f acc (Branch v l r) = f v (fold f acc l) (fold f acc r)
foldRT :: (a -> b -> b) -> b -> Tree a -> b
foldRT _ acc Leaf = acc
foldRT f acc (Branch v l r) = foldRT f (f v (foldRT f acc r)) l
任务是用fold 重写foldRT。我已经被它困了很久,无法绕开它。
不胜感激。
【问题讨论】:
-
@pdoherty926 我相信没有更多的东西 - 重构的问题陈述可能是“在变质方面实现类似列表/
Foldable-like 折叠 (foldRT) /一般折叠 (fold)"。 -
参见stackoverflow.com/a/27458645/383200,了解一般技术的讨论。该答案适用于列表,但同样的想法也适用。
标签: haskell