在同一个int的Haskell中定义无限列表,哪种方式?

vis*_*vis 4 haskell list

在Haskell中定义无限列表:

[1,1..] => [1,1,1,..]
Run Code Online (Sandbox Code Playgroud)

或者,循环方式:

lst=1:lst
Run Code Online (Sandbox Code Playgroud)

第一个定义与第二个相同吗?如果没有,哪一个是首选方式?

jbe*_*man 6

您可能想要repeat定义与第二个实现等效的位置.

[1,1..]一个例子中的符号是enumFrom*前奏函数的语法糖.使用您喜欢的任何一种.


lef*_*out 6

repeat/ 1:lst更好,他们不需要任何额外的计算,但[1,1..]确实:

[1,1..] = enumFromThen 1 1 = en 1
            where en n = n : en (n + n?)
                  n? = 1-1 = 0
Run Code Online (Sandbox Code Playgroud)

所以它总是需要执行额外的1+0.