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