在Haskell中生成所有整数的无限列表的好方法是什么?

Cha*_* Xu 8 haskell

我在haskell中编写了以下函数,因为它将枚举每个整数:

integers = (0:)$ concat $ zipWith (\x y -> [x,y]) [1..] (map negate [1..])
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来做到这一点,看起来确实有点过于复杂.

另外,我想知道是否有标准实现来列出维度$ k $的整数点阵中的所有元素.

Ric*_* T. 17

integers = 0 : concat [[x,(-x)] | x <- [1..]]
Run Code Online (Sandbox Code Playgroud)

(或者,正如@ DanielWagner在下面评论中的解决方案中我觉得的更好)

  • 当你已经在列表理解中时,为什么要"concat"?`integers = 0:[y | x < - [1 ..],y < - [x,-x]]`. (8认同)

Lan*_*dei 6

import Control.Applicative

integers = 0 : zipWith (*) ([1..] <* "mu") (cycle [1,-1])
Run Code Online (Sandbox Code Playgroud)

当然,你也可以走非僧人的道路:

integers = 0 : [y | x <- [1..], y <- [x,-x]]
Run Code Online (Sandbox Code Playgroud)

但是你不会理解mu的真正含义.