2012-06-10 18 views
13

मैं :while और :when परीक्षण के बीच अंतर पर 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]) 

उन पर व्याख्या से कर सकते हैं किसी को भी मदद करता है?

उत्तर

24

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

नोट, यदि आप पसंद करते हैं, तो आप (नहीं (x x)) (नहीं = x 10) का उपयोग कर सकते हैं। – uvtc

+0

चीयर्स! मेरा जवाब संपादित किया। – Gert

7

: जब किसी भी आंतरिक 'के लिए' बाइंडिंग या उसके शरीर अभिव्यक्ति को उस पुनरावृत्ति के लिए मूल्यांकन करने से रोकता है, तो 'फ़िल्टर' फ़ंक्शन की तरह अभिनय करता है।

: जबकि रुकती है यह किसी भी अधिक आगे बढ़ने से, और अधिक की तरह 'ले, जबकि' पिछले उदाहरण यहाँ पर

संबंधित मुद्दे