在 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
不会。
所以,为了准备即将到来的考试,我复习了一些旧考试,并遇到了这个问题:
编写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
不会。