相当于SRFI 42:在Racket的理解中

Oma*_*ena 0 scheme list-comprehension racket

SRFI 42中的急切理解可以有一个:while在某些条件成立时运行生成器的子句,例如:(list-ec (:while (:range i 10) (< (* i i) 50)) i)返回列表(0 1 2 3 4 5 6 7)(并停止 7处的迭代,不像是if,如(list-ec (:range i 10) (if (< (* i i) 50)) i)将继续运行,但不会产生更多值).

在拍,我一般喜欢使用原生forfor/list,但他们似乎并不具备这样的内置.什么是:while在Racket中模拟的最佳方式for

Asu*_*awa 7

您可以#:breakfor循环中使用子句来执行类似的操作.例如,以下是我认为与您的示例相同的内容:

(for/list ([i (in-range 0 10)]
           #:break (> (* i i) 50))
     i)
Run Code Online (Sandbox Code Playgroud)

#:break条件成立时,这将停止迭代.您还可以使用#:when过滤迭代而不是停止.有关更多选项,请参阅for docs.