-- unzip 将map的key和value分别取出放到2个list中
myUnzip :: [(a, b)] -> ([a], [b])
myUnzip [] = ([], [])
myUnzip ((x, y) : zs) = (x : xs, y : ys)
where (xs, ys) = myUnzip zs
-- myUnzip1 :: [(a, b)] -> ([a], [b])
-- myUnzip1 [] = []
-- myUnzip1 (x, y) : ys = (x , xs) : (y, ys)
-- where
-- >>> myUnzip [(1,4), (2,5), (3, 6)]
-- ([1,2,3],[4,5,6])
--
myZip :: [a] -> [a] -> [(a, a)]
myZip [] [] = []
myZip _ [] = []
myZip [] _ = []
myZip (x : xs) (y : ys) = (x, y) : myZip xs ys
-- >>>myZip [1,2,3] [4,5,6]
-- [(1,4),(2,5),(3,6)]
--
-- >>>myZip [1,2,3] []
-- []
--
myZipWith f [] [] = []
myZipWith f (x : xs) (y : ys) = f x y : myZipWith f xs ys
-- >>> myZipWith (+) [1,2,3] [4,5,6]
-- [5,7,9]
--