在Haskell中定义无限列表:
[1,1..] => [1,1,1,..]
Run Code Online (Sandbox Code Playgroud)
或者,循环方式:
lst=1:lst
Run Code Online (Sandbox Code Playgroud)
第一个定义与第二个相同吗?如果没有,哪一个是首选方式?
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
.