【发布时间】:2011-09-26 11:13:54
【问题描述】:
我在 Haskell 中编写了一个合并排序,它在使用数字时有效,但不适用于单词,我认为它会。使用单词和字母时,我只会得到“不在范围内”。我做错了什么?
这是我的代码:
merge :: Ord a => [a] -> [a] -> [a]
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]
mergeSort [] = []
mergeSort [x] = [x]
mergeSort xs
= merge (mergeSort top) (mergeSort bottom)
where
(top, bottom) = splitAt (length xs `div` 2) xs
【问题讨论】:
-
这适用于字符串,f.e.
mergeSort ["banana", "candy", "apple"] -
您的代码看起来不错。查看确切的输入和完整的错误消息可能会有所帮助。 something 不在范围内并不是很有帮助...