簡體   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