2012-06-10 24 views
13

Sto studiando clojure ma non del tutto chiara sulla differenza tra il test e :while:when:Qual è la differenza tra: while e: when in clojure?

=> (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]) 

aiuto chiunque può elaborando su di loro?

risposta

24

:when itera nel corso degli attacchi, ma valuta solo il corpo del ciclo quando la condizione è vera. :while itera oltre le associazioni e valuta il corpo fino la condizione è falsa:

(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) 
+3

Nota, è possibile utilizzare (non = x 10) anziché (non (= x 10)), se si preferisce. – uvtc

+0

evviva! Modificato la mia risposta. – Gert

7

: quando impedisce a qualsiasi associazione interna "per" o alla sua espressione del corpo di essere valutata per quella iterazione, agisce come la funzione "filtro".

: mentre interrompe questo legame da procedere più, agendo più come 'take-po'

Problemi correlati