-- 有序数组合并
merge' :: Ord a => [a] -> [a] -> [a]
merge' [] [] = []
merge' [] x = x
merge' x [] = x
merge' (x : xs) (y : ys) | x < y = x : (merge' xs (y : ys))
| otherwise = y : (merge' (x : xs) ys)
解释一下:
传入两个列表都为空的时候,返回空
两个也列一个为空,一个部位空的时候,返回非空列表
(x : xs) (y : ys), x为第一个列表的头元素,xs为第一个列表的除过头元素以外的元素,y为第二哥列表的头元素,ys为第一个列表的除过头元素以外的元素。 判断如果x < y 则返回 x : (merge’ xs (y : ys))
此处,冒号是连接的意思,就是把x连接到后面的数组。后面的数组,递归调用merge函数,继续对xs和,y,ys进行合并。依次类推。