2

以下は、修飾子「while」が、要素がチェックに一致すると反復が停止することを意味することを示しています。

=> (for [x [3 2 3 1] :while (< x 3)] x)
()

しかし、なぜ次の反復が停止しないのでしょうか? 私の(間違った)理解では空のリストを返すはずです。

=> (for [x [3 2 3 1] y [:a :b] :while (< x 3)] [x y])
([2 :a] [2 :b] [1 :a] [1 :b])

実際、この場合、"when" 修飾子と "while" 修飾子の間に違いはありません。

=> (for [x [3 2 3 1] y [:a :b] :when (< x 3)] [x y])
([2 :a] [2 :b] [1 :a] [1 :b])

それはどのように起こりますか?

4

1 に答える 1

5

:whileand修飾子は、:when直前のバインディングの後に常にチェックされ、そのループの繰り返しにのみ適用されます。new のバインドを停止する場合は、句ではなく、句の後xに置く必要があります。:whilexy

于 2012-07-20T06:56:49.297 に答える