[英]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.