6
(defn seq-trial 
    [] 
    (map #(do (println "hello " %) (inc %)) (range 10))) 

(take 3 (seq-trial)) 

जब बाहर प्रिंट का मूल्यांकन काम नहीं करता है इसके बाद के संस्करण कोड snippt निम्नलिखित -आलस्य के रूप में उम्मीद

(हैलो 0 हैलो 1 हैलो 2 हैलो 3 हैलो 4 हैलो 5 हैलो 6 हैलो 7 हैलो 8 हैलो 9 1 2 3)

क्योंकि नक्शा देता है एक आलसी अनुक्रम मैं यह केवल मुद्रित करने के लिए उम्मीद -

(हैलो 0 हैलो 1 हैलो 2 1 2 3)

क्यों पूरी सूची यहां मूल्यांकन किया जाता है?

उत्तर

8

यह चंकिंग नामक एक प्रदर्शन अनुकूलन के कारण है। अनिवार्य रूप से अनुक्रम को एन भागों के समूहों में समझा जाता है जिन्हें खंड कहा जाता है। इसका मतलब है कि आपको अपने मैपिंग फ़ंक्शन में किसी भी दुष्प्रभाव की देखभाल करने की आवश्यकता है। अंतिम परिणाम सही है, आपको अभी भी सही लंबाई का अनुक्रम मिलता है

डिफ़ॉल्ट खंड आकार 32 है, इसलिए यदि आप अपनी सीमा को उस मान से बड़े मानते हैं जो आप समझेंगे कि थोड़ा बेहतर क्या हो रहा है:

user> (defn seq-trial 
    [] 
    (map #(do (println "hello " %) (inc %)) (range 100))) 

user> (take 3 (seq-trial)) 
hello 0 ; 32 item 'chunk' realized... 
hello 1 

... 

hello 30 
hello 31 
(1 2 3) ; the expected returned value 

आप बेडौल वहाँ options available

+2

दुष्प्रभाव और आलसी मूल्यांकन मिश्रित नहीं होते हैं से बचने के लिए की जरूरत है। –

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