rlh*_*lhh 3 haskell list-comprehension list
无论如何,我可以在Haskell中扩展列表列表吗?
我正在尝试编写一个生成[1,2,2,3,3,3,4,4,4,4 .....]的函数,它基本上是1个,2个,2个,3个等等.
我的尝试:
Run Code Online (Sandbox Code Playgroud)nnss :: [Integer] nnss = [nPrint x x | x <- [1,2..]]
我尝试的问题是nPrint x x返回一个整数列表,例如,nPrint 2 2将返回[2,2].无论如何,我可以将列表从[1,2,3 ...]"扩展"到[1,2,2,3,3,3 ...]?
我们正在寻找的功能签名是[[a]] -> [a],如果我们检查hoogle,我们会看到这concat就是我们正在寻找的.
在这种情况下,列表理解是不必要的,因为我们只是迭代每个项目,所以我们真的想要做一个map.因此,由于结合map并且concat如此常见,我们可以写
concatMap (\x -> nPrint x x) [1..]
Run Code Online (Sandbox Code Playgroud)
如果你是haskell的新手,你可以忽略这一点但是由于concatMap我们也可以编写列表monad
[1..] >>= \x -> nPrint x x
Run Code Online (Sandbox Code Playgroud)