Haskell从两个列表中绘制函数参数

时间:2014-11-20 21:41:38

标签: haskell recursion tree mapping

我正在尝试为树实现一种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个元素。首先是第一个,第二个是第二个,等等。

非常感谢任何帮助!

1 个答案:

答案 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))

应该做的伎俩。