fla*_*awr 4 haskell list-comprehension
我想知道是否可以在列表理解中将多个元素添加到列表中.
例如,如果我想要一个由数字1到10组成的列表,我可以写:
[k | k <- [1..10]]
Run Code Online (Sandbox Code Playgroud)
但是,还有一种方法可以通过始终添加k 并 k+1在同一步骤中执行此操作,并且只采用奇数k吗?以下代码无效,但可能更好地解释了我正在尝试做的事情:
[k, k+1 | k <- [1, 3..10]]
Run Code Online (Sandbox Code Playgroud)
目前,最接近这一点(我所知道的)如下:
foldl1 (++) [[k, k + 1] | k <- [1, 3..10]]
Run Code Online (Sandbox Code Playgroud)
有一些替代方案,其中没有一个明显优于你的建议.
concat [ [k, k+1] | k <- [1, 3 .. 10] ]
join [ [k, k+1] | k <- [1, 3 .. 10] ]
[ x | k <- [1, 3 .. 10], x <- [k,k+1] ]
[1, 3 .. 10] >>= (\x -> [x, x + 1])
do x <- [1, 3 .. 10] ; [x, x+1]
Run Code Online (Sandbox Code Playgroud)
请注意foldl1 (++),如在解决方案中,如果找到空列表列表,将使用运行时错误中止程序.上述替代方案没有这样的问题.