haskell简单合并

时间:2011-03-22 19:49:25

标签: haskell

我正在尝试实现一个简单的合并,而不使用任何预定义的东西。任何人都可以指出我正确的方向,我会使用list comp吗?还是反悔等?

任何提示欢迎..到目前为止我得到了

merge::  [a] ->  [a] -> [a]
mergexs [] = xs
merge [] ys = ys
merge (x:xs) (y:ys) = 

2 个答案:

答案 0 :(得分:4)

我认为你的定义几乎就在那里。

merge :: [a] -> [a] -> [a]

首先,您需要让Haskell知道您要合并的数据是可订购的。

merge :: Ord a => [a] -> [a] -> [a]
merge xs [] = xs
merge [] ys = ys

你在这里定义的条件对我来说很好。以任何方式合并空列表只会产生另一个列表。所以你现在要做的就是定义你想要合并的条件。有三种情况需要考虑。 x小于y,x大于y或它们都相等。

merge (x:xs) (y:ys) | x < y = undefined
                    | x > y = undefined
                    | otherwise = undefined

我认为你想要使用递归方法。听起来你只是想要一个暗示而不是直接回答。如果您正在逐步合并它们,请考虑如何手动列出这样的列表。

merge [1,2] [3,4]      -- Choose the minimum element and then use merge again
1 : merge [2] [3,4]    -- to get the rest of the list
1 : 2 : merge [] [3,4] -- Repeat until nothing else to merge
1 : 2 : 3 : 4

答案 1 :(得分:2)

如果通过“合并”,您的意思是“拼接”列表,如下所示:

merge "aaaaaaaaa" "bbbbbb"
>>> "ababababababaaa"
merge "lunar" "solar"
>>> "lsuonlaarr"

你可以说:

merge :: [a] -> [a] -> [a]
merge xs [] = xs
merge [] ys = ys
merge (x:xs) (y:ys) = x:y:merge xs ys