What is the difference between :while and :when in clojure?

后端 未结 3 588
闹比i
闹比i 2021-02-07 08:34

I\'m studying clojure but not quite clear on the difference between the :while and :when test:

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


        
相关标签:
3条回答
  • 2021-02-07 08:56

    :when iterates over the bindings, but only evaluates the body of the loop when the condition is true. :while iterates over the bindings and evaluates the body until the condition is false:

    (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)
    
    0 讨论(0)
  • 2021-02-07 08:59

    :when prevents any inner 'for' bindings or its body expression from being evaluated for that one iteration, acting like the 'filter' function.

    :while halts this binding from proceeding any more, acting more like 'take-while'

    0 讨论(0)
  • 2021-02-07 09:09

    Look at the last example here: http://clojuredocs.org/clojure_core/clojure.core/for#example_913

    0 讨论(0)
提交回复
热议问题