Haskell - 为树类型创建折叠函数

标签 haskell tree fold

我有这个简单的数据树:

data Tree = Leaf Int | Node [Tree]

我必须为这种类型开发一个折叠函数:

foldTree :: (Int -> a) -> ([a] -> a) -> Tree -> a

例如:

foldTree (+1) sum (Node[ (Leaf 2), (Leaf 3)]) 

将返回 (2+1)+(3+1) = 7 对于叶子,我有:

foldTree f g (Leaf n)  = (f n)

但我没有开发节点案例的想法。

我是法国人,也对我的错误表示歉意。

最佳答案

有时查看范围内可用的内容及其类型会有所帮助。解决办法如下:

foldTree f g (Leaf n)  = (f n)
foldTree f g (Node subtrees)  = 
  let as = map (foldTree f g) subtrees -- as :: [a]
  in g as

关于Haskell - 为树类型创建折叠函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47792606/

相关文章:

java - 困惑 - 二叉树的高度

tree - extjs,将所有子项展开为树面板

haskell - 是否存在看起来不像容器的重要可折叠或可遍历实例?

haskell - Haskell 梁的简单 where 子句的类型错误

c - 递归树遍历,为树的每个叶子返回一个变量

Haskell — Monad 绑定(bind)评估顺序

sml - 带折叠的多种输入类型

Java 折叠数组列表

haskell - 大多数时候有什么理由不使用 StrictPragma 吗?

Haskell 在 CoffeeScript 中的 $(函数应用程序运算符)?