如何在Haskell中创建递归zipWith函数?

时间:2015-04-28 01:36:08

标签: list function haskell recursion

到目前为止,我有:

miZipWith f [] [] = []
miZipWith f (x:xs) [] = []
miZipWith f [] (y:ys) = []
miZipWith f (x:xs) (y:ys) = f y: miZipWith f xs ys

----miZipWith f (x:xs) (y:ys) = f x : f y : miZipWith f xs ys

但这只是"拉链"函数f与第二个列表。我如何包含第一个列表?

*Main> miZipWith (*2) [1,2,3,4] [5,6,1]
[10,12,2]

1 个答案:

答案 0 :(得分:5)

zipWith功能如下:

zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith f (x:xs) (y:ys) = f x y : zipWith f xs ys
zipWith _ _ _ = []

你的假设是函数f只接受一个参数,但它实际上需要两个参数(两个列表的头部)。