9

如果我有一个列表列表,比如说[[1,2,3],[1,2,3],[1,2,3]],Haskell 有什么办法可以将它变成只有 1 个列表,比如[1,2,3,1,2,3,1,2,3]

提前致谢!

4

3 回答 3

31

Concat 做你想做的事:

concat [[1,2,3],[1,2,3],[1,2,3]]

以后要找到这类功能,可以使用hoogle http://www.haskell.org/hoogle/

您可以搜索类型 - 您需要的功能是[[Int]] -> [Int],因此您可以进行此搜索。顶层函数是 concat。

我应该提到事实上

concat :: [[a]] -> [a]

所以它适用于任何列表列表,您也可以很高兴地使用该类型搜索 hoogle。不过,Hoogle 足够聪明,可以理解哪些类型与您的要求非常接近。

于 2012-10-08T19:53:48.170 回答
8

有一些方法可以做到这一点,您可以使用列表推导,例如:

[y | x <- [[1,2,3],[1,2,3],[1,2,3]], y <- x]

或加入函数,实际上,同样的方式:

import Control.Monad (join)
join [[1,2,3],[1,2,3],[1,2,3]]

或连接函数:

concat [[1,2,3],[1,2,3],[1,2,3]]

或 msum(与 concat 相同):

import Control.Monad (msum)
msum [[1,2,3],[1,2,3],[1,2,3]]

或 mconcat(与 concat 相同):

import Data.Monoid (mconcat)
mconcat [[1,2,3],[1,2,3],[1,2,3]]
于 2012-10-08T19:54:24.990 回答
5

直接回答

> concat [[1,2,3],[1,2,3],[1,2,3]]
[1,2,3,1,2,3,1,2,3]

每当您想搜索任何功能时,都应该尝试hoogle 。有时类型足以获取有关您需要的功能的信息。

于 2012-10-08T19:53:48.230 回答