在 Haskell 中生成无限列表

Generating Infinite List in Haskell

所以,为了准备即将到来的考试,我复习了一些旧考试,并遇到了这个问题:

编写Haskell代码来定义ints :: [Int]以下形式的无限列表: [0, 1, -1, 2, -2, 3, -3, 4, -4..]

在过去的半个小时里,我一直在努力解决这个问题,但似乎找不到任何解决方法,或者说这会做我想做的事。我觉得我真正想要的是表格的列表理解

ints :: [Int]
ints = [0] ++ [x (-x) | x <- [1..]]

但这不起作用,我不确定如何让它起作用

问题是 x (-x) 不是 Int 类型(感谢@leftaroundabout 删除了此处关于无效语法的废话)。您希望为每个 x 生成两个值。所以我想最简单的方法是创建许多列表对 [1, -1][2, -2],...然后将它们连接在一起。并且显然在前面加上 0.

ints :: [Int]
ints = 0 : concat [[x, (-x)] | x <- [1..]]

此外,您可能希望使用 Integer 而不是 Int,因为 Int 会在某些时候溢出,但 Integer 不会。