Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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 mergesort实现编译,但不返回任何内容_Haskell_Mergesort - Fatal编程技术网

haskell mergesort实现编译,但不返回任何内容

haskell mergesort实现编译,但不返回任何内容,haskell,mergesort,Haskell,Mergesort,以下是我的实现: mergesort :: (Ord a) => [a] -> [a] mergesort list = merge (mergesort (left list)) (mergesort (right list)) where left xs = take (div (length xs) 2) xs right xs = drop (div (length xs) 2) xs merge [] ys = ys merge xs [

以下是我的实现:

mergesort :: (Ord a) => [a] -> [a]
mergesort list = merge (mergesort (left list)) (mergesort (right list))
  where
    left xs = take (div (length xs) 2) xs
    right xs = drop (div (length xs) 2) xs
    merge [] ys = ys
    merge xs [] = xs
    merge (x:xs) (y:ys)
      | x <= y = x : merge xs (y:ys)
      | otherwise = y : merge (x:xs) ys
mergesort::(Ord a)=>[a]->[a]
合并排序列表=合并(合并排序(左列表))(合并排序(右列表))
哪里
左xs=take(div(长度xs)2)xs
右xs=下降(div(长度xs)2)xs
合并[]ys=ys
合并xs[]=xs
合并(x:xs)(y:ys)

|x缺少基本情况-因此得到无限递归。尝试使用类似于
[]
[1]
的列表逐步浏览示例,您将直接陷入问题

mergesort :: (Ord a) => [a] -> [a]
mergesort [] = []   -- < ADDED
mergesort [x] = [x] -- < ADDED
mergesort list = merge (mergesort (left list)) (mergesort (right list))
  where
    left xs = take (div (length xs) 2) xs
    right xs = drop (div (length xs) 2) xs
    merge [] ys = ys
    merge xs [] = xs
    merge (x:xs) (y:ys)
      | x <= y = x : merge xs (y:ys)
      | otherwise = y : merge (x:xs) ys
mergesort::(Ord a)=>[a]->[a]
合并排序[]=[]-<已添加
合并排序[x]=[x]-<已添加
合并排序列表=合并(合并排序(左列表))(合并排序(右列表))
哪里
左xs=take(div(长度xs)2)xs
右xs=下降(div(长度xs)2)xs
合并[]ys=ys
合并xs[]=xs
合并(x:xs)(y:ys)

|您的原始代码是否包含空的案例?如果没有,请回滚该编辑。并让亚历克知道,这样他就可以在他的答案中删除对该案例的引用。他应该把答案标记为正确的。很抱歉