用zipWith编写zip

时间:2018-06-13 04:39:14

标签: haskell

我正在通过Chris Allen和Julie Moronuki的Haskell编程书来学习Haskell。需要有关压缩列表练习之一的帮助。练习有3个部分,前两个是关于编写我们自己的zip和zipWith实现,我能够。

myzip1 :: [a] -> [b] -> [(a,b)]
myzip1 _ [] = []
myzip1 [] _ = []
myzip1 (x:xs) (y:ys) = (x,y) : myzip1 xs ys

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

最后一部分要求用zipWith写zip。我无法提出解决方案。老实说,我无法完全掌握这个问题(以秒为单位编写一个函数,当不需要第二个函数应用时,因为它首先需要所有参数)。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:8)

myzip1myZipWith之间的唯一区别是

myzip1      (x:xs) (y:ys) =   (x,y) : myzip1      xs ys
myZipWith f (x:xs) (y:ys) = (f x y) : myZipWith f xs ys

对于某些myzip1myZipWith ff可能相同。

myzip1 = myZipWith f

f会是什么

(f x y) = (x, y)