通过过滤每两个数字的序列,使用推导式在 Haskell 中生成列表

mda*_*lva 3 haskell functional-programming

我想使用理解在haskell中执行以下列表:

[1,2,5,6,9,10,13,14,17,18]
Run Code Online (Sandbox Code Playgroud)

我试过这个:

[x | x <- [1..18], y <- [1..4], y < 3]
Run Code Online (Sandbox Code Playgroud)

但我明白了:

[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18]
Run Code Online (Sandbox Code Playgroud)

我不知道是否可以使用一些 Enum 函数来获取列表,但我想知道是否有某种方法可以通过列表推导来实现。我可以看到每个 y 值都有一个 x,但我只想要过滤器的 y 值,而不是第一代列表。

Net*_*ave 5

你可能想要这个:

Prelude> [x+y | x <- [1, 5..18], y <- [0..1]]
[1,2,5,6,9,10,13,14,17,18]
Run Code Online (Sandbox Code Playgroud)

  • @mdasilva `x` 正在从列表 `[1, 5, 9, 13, 17]` 中获取,而 `y` 正在从列表 `[0, 1]` 中获取。由于每一对`x`和`y`的结果是`x+y`,最终的列表是`[1+0, 1+1, 5+0, 5+1, 9+0, 9+1 , 13+0, 13+1, 17+0, 17+1]`。 (2认同)