【发布时间】:2022-01-21 16:48:18
【问题描述】:
我在 Haskell 中做一个小项目,我在创建“玫瑰树”的函数路径时遇到了困难。我的玫瑰树有一个不同的点,从一开始我就有四种可能性。
我想做的是:
data RoseTree a = Start [RoseTree Movimento] | Node a [RoseTree Movimento]
deriving (Eq, Show)
paths :: RoseTree Movimento -> [[Movimento]]
paths (Start []) = []
paths (Node n []) = [[n]]
paths (Node n ns) = map ((:) n . concat . paths) ns
paths (Start xs) = undefined
PS -> 树示例:
data Movimento = AndarEsquerda | AndarDireita | Trepar | InterageCaixa
deriving (Show, Read, Eq, Ord)
Start [Node AndarEsquerda [Node AndarDireita [Node AndarEsquerda [],Node Trepar []]],Node Trepar [Node AndarDireita [Node AndarDireita []],Node AndarEsquerda [Node AndarEsquerda []]]]
预期输出:
[[AndarEsquerda, AndarDireita, AndarEsquerda],
[AndarEsquerda, AndarDireita, Trepar],
[Trepar, AndarDireita, AndarDireita],
[Trepar, AndarEsquerda, AndarEsquerda]]
【问题讨论】:
-
你是如何定义玫瑰树的?
-
对不起,我真的忘记了:data RoseTree a = Start [RoseTree Movimento] |节点 a [RoseTree Movimento] 推导 (Eq, Show)
-
你给了我们一些输入数据的例子,为什么不也举一个你期望
paths example给出的例子。 -
输入:Start [Node AndarEsquerda [Node AndarDireita [Node AndarEsquerda [],Node Trepar []]],Node Trepar [Node AndarDireita [Node AndarDireita []],Node AndarEsquerda [Node AndarEsquerda []] ]] 输出:[[AndarEsquerda, AndarDireita, Andar Esquerda], [AndarEsquerda, AndarDireita, Trepar], [Trepar, AndarDireita, AndarDireita], [Trepar, AndarEsquerda, AndarEsquerda]]
-
阿方索,您编辑问题。我是
paths input应该得到的结果。顺便说一句,要解决缺少的分支,您需要问自己 Start 与 Node 有何不同。
标签: haskell path tree binary project