我正在尝试为树实现一种zip功能。对于此示例,每个树节点都有一个整数值(Label),一个转换函数(Label-> Label)和一个子树列表[Tree]。
tzp(tree-zip)方法采用两棵树,并根据某些条件将它们的值相加。这是问题:
如何获取函数以递归方式获取每个[Tree] -List的下一个子树?
我目前的实施方式,以防您好奇
tzp :: (Label -> Label -> Label) -> Tree -> Tree -> Tree
tzp arithmeticF t1 t2 = if ((getNodeValue t1) == (getNodeValue t2)) then (Node (arithmeticF (getNodeValue t1)) ((getNodeFunction t1) . (getNodeFunction t2) (getNodeValue t1)) (map (tzp arithmeticF) (getSubTrees t1) (getSubTrees t2)))
罪魁祸首是这部分:
(map (tzp arithmeticF) (getSubTrees t1) (getSubTrees t2))
由于地图无法使用two
列表。准确地说,我必须将该函数应用于任一列表的第n个元素。所以首先是第一,第二是第二,依此类推。
任何帮助是极大的赞赏!
Prelude> :t uncurry
uncurry :: (a -> b -> c) -> (a, b) -> c
Prelude> :t (+)
(+) :: Num a => a -> a -> a
Prelude> :t uncurry (+)
uncurry (+) :: Num c => (c, c) -> c
因此,类似:
map (uncurry tzp arithmeticF) (zip (getSubTrees t1) (getSubTrees t2))
应该做的把戏。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句