簡體   English   中英

如何在Haskell中將元組列表轉換為常規列表?

[英]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模式!

  1. 列出清單
  2. 使用為每個元素生成列表的函數
  3. 加入一個列表。

它不必是列表,

  1. 拿一個容器
  2. 使用為每個元素生成新容器的函數
  3. 加入容器。

對於列表情況,此函數的類型為

[a] -> (a -> [a]) -> [a]

讓我們叫的容器ama ,其中m是容器類型。 在這種情況下,我們將有

m a -> (a -> m a) -> m a

這個函數是>>= 我們將其用作中綴運算符。

Prelude> [(1,4),(2,5)] >>= \(x,y) -> [x,y]
[1,4,2,5]

...容器必須支持將兩層“折疊”成一層。 這是一個單子:)

a >>= fconcatMap 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.

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