我正在尝试为树实现一种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个元素。首先是第一个,第二个是第二个,等等。
非常感谢任何帮助!
答案 0 :(得分:0)
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))
应该做的伎俩。