परीक्षण सही होने पर प्रत्येक चरण परिणाम बदलता है, या परीक्षण गलत होने पर इसे अकेला छोड़ देता है।
आप सूत्रण अनाम प्रक्रियाएं द्वारा 1.4 में यह लिख सकते हैं:
user> (-> 1 (#(if true (inc %) %))
(#(if false (* % 42) %))
(#(if (= 2 2) (* % 3) %)))
6
हालांकि cond->
नए कार्यों को शुरू नहीं करता है, बजाय इसे उत्पन्न करता है एक बाध्यकारी रूप अधिक कुशल होने का:
user> (let [g 1
g (if true (inc g) g)
g (if false (* g 42) g)
g (if (= 2 2) (* g 3) g)]
g)
6
और g
के लिए gensym
का उपयोग करता है, कुछ रूपों में प्रतीक g
का उपयोग करते हैं cond->>
बहुत समान है, यह सिर्फ एक अलग जगह में धागे वाले प्रतीक रखता है।
user> (let [g 1
g (if true (inc g) g)
g (if false (* 42 g) g)
g (if (= 2 2) (* 3 g) g)]
g)
6
जो इस उदाहरण में एक ही परिणाम देता है क्योंकि *
और +
विनिमेय हैं।
स्रोत
2012-12-12 00:01:51
आपको यह कहां मिला? – mishadoff
अनुमान में मुझे लगता है कि यह 6 = '(* 3 (inc 1))' देता है, जहां यह किसी भी फ़ंक्शन के माध्यम से पहला तर्क थ्रेड करता है जिसका अनुमान वास्तविक सत्य है। – cobbal
https://github.com/clojure/clojure/blob/master/changes.md#24-new-threading-macros –