【问题标题】:Haskell own function to merge two listsHaskell 自己的函数来合并两个列表
【发布时间】:2014-02-17 03:33:57
【问题描述】:

我需要编写一个函数来合并两个列表。就像'++'正在工作。

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)

【问题讨论】:

  • @erthalion 不,这是一个未排序的插值。这种合并排序或连接,我认为他们要求连接。
  • erthalion,这不是我要找的块。

标签: list function haskell merge


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多