繁体   English   中英

使用冒泡排序按长度对列表中的列表进行排序 - Haskell

[英]Sorting lists in list by length using bubble sort - Haskell

我有一个输入,它是[[a]]类型的,我正在尝试按列表的长度对列表中的列表进行排序。 我正在研究自己的冒泡排序实现,目前看起来像这样:

myInput :: Ord a => [[a]] -> [[a]]
myInput [[]] = [[]]
myInput [[x]] = [[x]]
myInput (x : xs) = mySort x (myInput xs)

mySort :: Ord a => [a] -> [[a]] -> [[a]]
mySort x [[]] = [x]
mySort x (y:ys) | (length x) < (length y) = x:y:ys
                | otherwise = y:(myInput x ys)

但是,当我输入myInput[[1,2],[1]]时,我得到一个非详尽的模式错误:

[[1]*** Exception: CourseworkRev.hs:(197,1)-(200,49): Non-exhaustive patterns in function myInput

声明空列表时我可能做错了,因为这是一个递归错误(如果我错了,请纠正我)。 关于如何使它工作的任何提示? 谢谢!

myInput没有针对空列表的模式,仅针对具有一个元素为空列表的列表。 无论如何,您可能不需要像[[]][[x]]这样的模式,因为对于具有单个元素的列表,您将返回包含该元素的列表,无论其长度如何,因此:

myInput :: Ord a => [[a]] -> [[a]]
myInput [] = []
myInput [x] = [x]
myInput (x : xs) = mySort x (myInput xs)

[[x]]匹配一个只包含一个子列表[x]的列表,它是一个包含一个元素的列表。 所以这将与[[1]]匹配,但与[[1,2]]不匹配。 另一方面, [x]与任何 singleton 列表匹配:具有一个元素的列表,因此[[1]][[1,4]][[1,4,2,5]][[]]都会匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM