簡體   English   中英

列表列表上的操作| 怎么樣

[英]operation on list of lists | how

當我在Haskell書中看到concat函數時,我想知道如何在Haskell中展平下面的列表。 在Python中,我可以這樣做,因為我可以在函數中檢查它的類型。 但在哈斯克爾,我做不到。 我如何壓扁下面的列表?

input: [[1, 2], [[2, 3], 5], [[[2, 3], [4, 5]], [2, 3]]]
output: [1, 2, 2, 3, 5, 2, 3, 4, 5, 2, 3]

正如已經指出的那樣,你不能在Haskell中擁有任意嵌套列表。 最接近的東西(沒有使用花式pragma的臟類型hacks)將是這樣的:

data Nested a = L a | B [Nested a]

flatten :: Nested a -> [a]
flatten (L x) = [x]
flatten (B xs) = concatMap flatten xs  

print $ flatten $ B[B[L 1,L 2],B[B[L 2,L 3],L 5],B[B[B[L 2,L 3],B[L 4, L 5]],B[L 2,L 3]]]
--[1,2,2,3,5,2,3,4,5,2,3]

你不能在haskell中創建一個具有不同深度的列表。 它不會發生變形。 [[a]][[[a]]] 此功能將解決您的問題,但僅限於具有相同深度的列表。

flat::[[a]] -> [a]
flat [] = []
flat l:ls = l ++ flat ls 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM