Haskell自己的函数合并两个列表

时间:2014-01-26 08:50:56

标签: list function haskell merge

我需要编写一个函数来合并两个列表。完全像'++'正在发挥作用。

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)

1 个答案:

答案 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