我看到了这段代码来生成斐波那契数。
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/

10-12 22:04