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,则需要:while在子句之后放置x,而不是y子句。

于 2012-07-20T06:56:49.297 回答