SRFI 42中的急切推导可以有一个:while
子句在某些条件成立的情况下运行生成器,例如:(list-ec (:while (:range i 10) (< (* i i) 50)) i)
返回列表(0 1 2 3 4 5 6 7)
(并在 7 处停止迭代,不像if
in(list-ec (:range i 10) (if (< (* i i) 50)) i)
那样会继续运行但不会产生更多值)。
在 Racket 中,我通常更喜欢使用原生的for
and for/list
,但它们似乎没有内置这样的东西。:while
在 Racket中模拟的最佳方法是for
什么?