我看到了这段代码来生成斐波那契数。fibs = 1:1:(zipWith (+) fibs (tail fibs))
是否可以编写类似样式的代码来生成无限列表[1 ..]?
我在Haskell网站上看到了这个link on cyclic structures。
有一个例子
cyclic = let x = 0 : y
y = 1 : x
in x
我试图以循环方式为问题定义一个列表,但未能成功。
我想要的是一个根据自身定义的列表,该列表在Hasekll中的值为[1 ..]。
注意:Haskell
[1..]
的计算结果为[1,2,3,4,5...]
,而不是[1,1,1...]
。 最佳答案
以下内容将为您提供所需的结果:
nats = 1 : map (+1) nats
或者,更习惯地说:
nats = iterate (+1) 1
很容易理解为什么第一个代码段通过使用方程式推理求值为
[1,2,3...]
:nats = 1 : map (+1) nats
= 1 : map (+1) (1 : map (+1) nats)
= 1 : map (+1) (1 : map (+1) (1 : map (+1) nats))
= 1 : 1 + 1 : 1 + 1 + 1 : ....
= [1,2,3...]
关于list - Haskell如何生成此无限列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19749350/