我有一棵树:
a :: Tree Double
a =
Node 1
[Node 20
[Node 300
[Node 400 [],
Node 500 []],
Node 310 []],
Node 30 [],
Node 40 []]
我希望将一个类似于列表的“扫描”操作应用到它上面,但是与返回列表不同的是,它应该返回一棵遍历路径的树。例如:
scan (+) 0 a
请将其简化为:
Node 1
[Node 21
[Node 321
[Node 721 [],
Node 821 []],
Node 331 []],
Node 31 [],
Node 41 []]
通过树来累计求和,是否有标准函数可用?
Traversable
类和一些辅助函数,您可以仅使用标准库函数通用地完成此任务。 - Thomas M. DuBuissonTraversable
,但它似乎没有一个执行这个特定任务的函数。 - Jeremy Listf = (+)
,这意味着函数链被应用于每个节点,例如对于最左下角的节点,(+1) . (+20) . (+300) $ 400
。我不希望编译器将其转换为(+321) $ 400
,这将使其成为线性,并且如果它确实执行了,那将是非常好的。(如果您愿意添加一条说明,我可以删除我的投票反对 - 或者我可以自己添加,如果您允许...) - Will Ness