[英]How to reverse a list of lists?
我有一個[[a]]
類型,例如:
[[1,2,3],[1,2],[1],[]]
但是我想在Haskell中創建一個函數,使其看起來像:
[[],[1],[1,2],[1,2,3]]
我從此功能開始,但不適用於其中包含列表的列表:
myreverse ::[Integer] -> [Integer]
myreverse [] = []
myreverse (h:t)= myappend (myreverse t) [h]
( myappend
是我擁有的本地函數,它將追加列表)
那么,我需要在代碼中進行哪些更改才能使其與包含其他列表的列表一起使用?
您的嘗試已經非常接近解決方案:
myreverse ::[Integer] -> [Integer]
myreverse [] = []
myreverse (h:t)= myappend (myreverse t) [h]
主要是您只需要更改兩件事。 首先使用類型變量更改Integer
,以便您可以使用函數反轉列表中的列表。 其次,您想在此處將列表追加到列表: myappend (myreverse t) [h]
為此,只需使用++
,就完成了!
myreverse :: [a] -> [a]
myreverse [] = []
myreverse (h:t)= (myreverse t) ++ [h]
如果您不想編寫自己的函數,也已經有一個reverse
函數:
Data.List.reverse [[1,2,3],[1,2],[1],[]]
輸出:
[[],[1],[1,2],[1,2,3]]
您可以使用reverse
功能或執行以下操作來做到這一點:
reversal :: [a] -> [a]
reversal [] = []
reversal (x : xs) = (reversal xs) ++ [x]
在您的示例中使用此代碼:
*Main> reversal [[1,2,3],[1,2],[1],[]]
[[],[1],[1,2],[1,2,3]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.