haskell - 寻找归纳定义树的叶子

标签 haskell functional-programming

所以,我有一个类型的函数:

genTree :: Node -> [Nodes]

给定一个节点,此函数会生成树中该节点的子节点集。该函数可以再次应用于这些子节点以生成它们的子节点,直到最终生成一个没有子节点的节点,即 genTree 返回 [] 的节点。

我想做的是,给定一个起始节点,生成树中以其为根的所有叶节点的列表。

有什么建议吗?

最佳答案

Martijn 答案中的函数生成树中所有节点的列表。您可以使用此列表并过滤掉没有子节点的节点来获取叶子:

nodes root  = root : concatMap nodes (genTree root)
leaves root = filter (null . genTree) (nodes root)

如果您愿意,您还可以将这两个函数合并为一个,直接生成叶子列表:

leaves node
   | null children = [node]
   | otherwise     = concatMap leaves children
   where children = genTree node

关于haskell - 寻找归纳定义树的叶子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1237566/

相关文章:

list - 使用默认值压缩而不是删除值?

clojure - 我应该如何构建一个列表并在 clojure 中返回它?

haskell - 由内而外构建管道代理

haskell - 函数式编程: Where does the side effect actually happen?

haskell - Haskell 中的类型比较

haskell - Haskell 中的验证

functional-programming - 功能编程-标准符号,图表等

haskell - 如何为具有幻像类型变量的新类型定义 MonadUnliftIO 实例?

clojure - 惰性序列的后处理 (Clojure)

Java Streams TakeUntil 过滤/收集 100 个元素