我正在研究clojure但不太清楚:while
和:when
测试之间的差异:
=> (for [x [1 2 3] y [1 2 3] :while (= (mod x y) 0)] [x y])
([1 1] [2 1] [2 2] [3 1])
=> (for [x [1 2 3] y [1 2 3] :when (= (mod x y) 0)] [x y])
([1 1] [2 1] [2 2] [3 1] [3 3])
有人可以通过详细说明来帮助吗?
答案 0 :(得分:25)
:when
遍历绑定,但只在条件为真时才计算循环体。 :while
遍历绑定并评估正文,直到条件为假:
(for [x (range 20) :when (not= x 10)] x)
; =>(0 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19)
(for [x (range 20) :while (not= x 10)] x)
; => (0 1 2 3 4 5 6 7 8 9)
答案 1 :(得分:7)
:when阻止任何内部'for'绑定或其体表达式被评估为该一次迭代,就像'filter'函数一样。
:虽然停止了这种约束,但更多的是像“接受时间”
答案 2 :(得分:1)