2011-02-28 30 views
6

मार्क के कमाल ट्यूटोरियल पेज के मुताबिक, "नक्शा फ़ंक्शन एक दिए गए फ़ंक्शन को लागू करता है जो संग्रह में प्रत्येक आइटम को एक पैरामीटर लेता है, परिणाम के आलसी अनुक्रम को लौटाता है"।क्लोजर मानचित्र फ़ंक्शन उत्सुक हो रहा है?

(def input-message-list (range 100 126)) 

(defn test-123 [in] 
    (println "doing " in) 
    (str "out " in)) 

(def output-test (map 
        test-123 
        input-message-list)) 

(first output-test) 

, आरईपीएल में मैं पूरी श्रृंखला के लिए println साइड इफेक्ट मिलता है, न सिर्फ पहला तत्व:

अभी तक मैं जब निम्न कार्य करें!

यहां लोगों का क्या चल रहा है?

उत्तर

7

पहले से ही here में उत्तर दिया:

के रूप में वास्तव में 32 तत्वों एक समय

आपका रेंज कम से कम 32 तत्व है पर मूल्यांकन किया जाता है।

3

यह खंडित अनुक्रमों का हिस्सा है जो वास्तव में क्लोजर में इतनी सर्वव्यापी है कि "आलसी से अधिक नक्शा" पैटर्न के प्रदर्शन में मदद करता है। इस तरह आपके मैपिंग फ़ंक्शन को बहुत अधिक लगातार कॉल मिलती है और यह JVM हॉटस्पॉट कंपाइलर के तेज़ पथ में बहुत तेज़ी से चलती है।

(reduce + (map inc (range 10000))) 

और

(loop [i 0 sum 0] 
    (recur (inc i) (+ sum i))) 

अब आप idomatic clojure लिख सकते हैं और पूरी गति प्राप्त कर सकते हैं: जब रिच 2008 में सैन फ्रांसिस्को में इस डेमो यह एक ही गति से कोड रन के इन दो टुकड़ों को देखने के लिए अद्भुत था । अगर यह एक समस्या हो जाती है तो आप इसे here

से बंद कर सकते हैं
संबंधित मुद्दे