我正在通过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。我无法提出解决方案。老实说,我无法完全掌握这个问题(以秒为单位编写一个函数,当不需要第二个函数应用时,因为它首先需要所有参数)。 谢谢你的帮助。
答案 0 :(得分:8)
myzip1
和myZipWith
之间的唯一区别是
myzip1 (x:xs) (y:ys) = (x,y) : myzip1 xs ys
myZipWith f (x:xs) (y:ys) = (f x y) : myZipWith f xs ys
对于某些myzip1
,myZipWith f
和f
可能相同。
myzip1 = myZipWith f
f
会是什么
(f x y) = (x, y)