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)将继续运行,但不会产生更多值).
在拍,我一般喜欢使用原生for和for/list,但他们似乎并不具备这样的内置.什么是:while在Racket中模拟的最佳方式for?
您可以#:break在for循环中使用子句来执行类似的操作.例如,以下是我认为与您的示例相同的内容:
(for/list ([i (in-range 0 10)]
#:break (> (* i i) 50))
i)
Run Code Online (Sandbox Code Playgroud)
当#:break条件成立时,这将停止迭代.您还可以使用#:when过滤迭代而不是停止.有关更多选项,请参阅for docs.