[英]How to convert a list of tuples into a regular list in haskell?
我想轉換一個元組列表(a,a)
逼到名單a
秒。 這就是我到目前為止
map (\(x,y) -> [x,y]) [(1,4),(2,5)]
> [[1,4],[2,5]]
但是我想要的是
> [1,4,2,5]
您所描述的是一種常見的Haskell模式!
它不必是列表,
對於列表情況,此函數的類型為
[a] -> (a -> [a]) -> [a]
讓我們叫的容器a
的ma
,其中m
是容器類型。 在這種情況下,我們將有
m a -> (a -> m a) -> m a
這個函數是>>=
! 我們將其用作中綴運算符。
Prelude> [(1,4),(2,5)] >>= \(x,y) -> [x,y]
[1,4,2,5]
...容器必須支持將兩層“折疊”成一層。 這是一個單子:)
a >>= f
與concatMap fa
相同,如Willem Van Onsem所建議。
你需要采取的唯一的額外步驟是concat
enate名單 ,有:
concat (map (\(x,y) -> [x,y]) [(1,4),(2,5)])
這里concat :: [[a]] -> [a]
因此將列表的列表連接在一起成為一個列表。
由於這種構造經常發生,因此有一個使它更方便的功能: concatMap :: (a -> [b]) -> [a] -> [b]
:( concatMap :: (a -> [b]) -> [a] -> [b]
:
concatMap (\(x,y) -> [x,y]) [(1,4),(2,5)]
您還可以使用list comprehension ,並將其編寫為:
[z | (x,y) <- data, z <- [x,y]]
data
是您的初始數據列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.