球拍:“范围”和“范围内”之间的区别

Nic*_*aki 3 for-loop functional-programming sequence racket

有两种可能性可以生成要在Racket中的for循环中迭代的数字序列:

(for ([i (range 1 5)])
    (display i))
Run Code Online (Sandbox Code Playgroud)

(for ([i (in-range 1 5)])
    (display i))
Run Code Online (Sandbox Code Playgroud)

range两者都有效并且in-range似乎是等效的,但是https://docs.racket-lang.org/reference/sequences.html说:

“当范围内的应用程序直接出现在 for 子句中时,它可以为数字迭代提供更好的性能。”

与 相比,这也成立吗range

Sor*_*ase 6

是的,与在语法上直接出现在子句中range的性能相同。事实上,在这种情况下只是简单地转换为。in-rangeforrangein-range

请注意,虽然rangein-range出现在for从句中时确实在功能上等效,但它们通常在功能上并不等效。

> (range 5)
'(0 1 2 3 4)
> (in-range 5)
#<stream>
Run Code Online (Sandbox Code Playgroud)