我需要编写一个函数来合并两个列表。完全像'++
'正在发挥作用。
let x = merge [1,2,3] [3,3,4] -- should output [1,2,3,3,3,4]
应该怎么做?
编辑:解决方案
merge :: [a] -> [a] -> [a]
merge [] ys = ys
merge (x:xs) ys = x : (merge xs ys)
答案 0 :(得分:1)
也许是这样的。
merge :: (a -> a -> Bool) -> [a] -> [a] -> [a]
merge pred xs [] = xs
merge pred [] ys = ys
merge pred (x:xs) (y:ys) =
case pred x y of
True -> x: merge pred xs (y:ys)
False -> y: merge pred (x:xs) ys
(++) xs ys = merge (\x y -> compare x y == LT) xs ys
或者,如果您只需要重复(++)的功能,可以使用hoogle查找其定义,最终将您带到source code
(++) [] ys = ys
(++) (x:xs) ys = x : xs ++ ys