如果我有一个列表列表,比如说[[1,2,3],[1,2,3],[1,2,3]]
,Haskell 有什么办法可以将它变成只有 1 个列表,比如[1,2,3,1,2,3,1,2,3]
?
提前致谢!
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 足够聪明,可以理解哪些类型与您的要求非常接近。
有一些方法可以做到这一点,您可以使用列表推导,例如:
[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]]
直接回答
> concat [[1,2,3],[1,2,3],[1,2,3]]
[1,2,3,1,2,3,1,2,3]
每当您想搜索任何功能时,都应该尝试hoogle 。有时类型足以获取有关您需要的功能的信息。