Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 哈斯克尔简单合并_Haskell - Fatal编程技术网

Haskell 哈斯克尔简单合并

Haskell 哈斯克尔简单合并,haskell,Haskell,我试图实现一个简单的合并,不使用任何预定义的东西。有人能给我指出正确的方向吗?我会使用列表补偿吗?或复发等 欢迎提供任何提示。。到目前为止我 merge:: [a] -> [a] -> [a] mergexs [] = xs merge [] ys = ys merge (x:xs) (y:ys) = 我想你的定义差不多了 merge :: [a] -> [a] -> [a] 首先,您需要让Haskell知道要合并的数据是可排序的 merge :: Ord a

我试图实现一个简单的合并,不使用任何预定义的东西。有人能给我指出正确的方向吗?我会使用列表补偿吗?或复发等

欢迎提供任何提示。。到目前为止我

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

我想你的定义差不多了

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 "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       

请指出,您确实需要什么样的合并。一种实现可能是
merge=(++)
。这取决于您是否将
++
计算在“任何预定义内容”中,这是一个相当模糊的要求。我假设合并意味着按顺序合并,类似于合并排序。我真的不想对它进行排序,我打算在之后处理:)Bugger:)在这种情况下,以斯拉的回答比我的解释更好。
merge :: [a] -> [a] -> [a]
merge xs [] = xs
merge [] ys = ys
merge (x:xs) (y:ys) = x:y:merge xs ys