कम करें और कटौती आपको अनुक्रम पर राज्य जमा करने दें। अनुक्रम में प्रत्येक तत्व तक संचित स्थिति को संशोधित करेगा, अनुक्रम का अंत तक पहुंच जाएगा।क्लोजर: कम करें, कटौती और अनंत सूचियां
असीमित सूची को कम करने या घटाने के प्रभाव क्या हैं?
(def c (cycle [0]))
(reduce + c)
यह जल्दी से आउटऑफमेमरी एरर फेंक देगा। वैसे, (reduce + (cycle [0]))
एक आउटऑफमेमरी त्रुटि नहीं फेंकता है (कम से कम उस समय के लिए नहीं जब तक मैं इंतजार कर रहा था)। यह कभी वापस नहीं आता है। यकीन नहीं है कि क्यों।
क्या असीमित सूची को कम करने या घटाने के तरीके को समझने का कोई तरीका है जो समझ में आता है? उपर्युक्त उदाहरण में जो समस्या मैं देखता हूं, वह है कि अंततः सूची का मूल्यांकन हिस्सा ढेर को बहने के लिए काफी बड़ा हो जाता है। शायद एक अनंत सूची सही प्रतिमान नहीं है। जनरेटर, आईओ स्ट्रीम, या एक इवेंट स्ट्रीम को कम करने से अधिक समझदारी होगी। मूल्यांकन के मूल्यांकन के बाद मूल्य को नहीं रखा जाना चाहिए और राज्य को संशोधित करने के लिए उपयोग किया जाना चाहिए।
धन्यवाद। समझ में आता है। पहले मामले में, मैं पहले सी को कॉल कर सकता हूं और वह अनंत सूची में पहले तत्व का मूल्यांकन करेगा, जो स्मृति में रहेगा। अगर मैं पहले पर्याप्त समय कहता हूं, तो अनंत सूची का मूल्यांकन हिस्सा बहुत बड़ा हो जाएगा और ढेर बह जाएगा। दूसरे मामले में मूल्यांकन किया गया हिस्सा लगातार फेंक दिया जाता है। वैसे, दूसरे मामले में, ढेर कभी नहीं बह जाएगा क्योंकि शून्य का योग अभी भी शून्य है। – yalis
शून्य बिट पर अच्छा बिंदु। कि clojure का उल्लेख करने के लिए मैं अपनी अच्छी लगता है कि गलत :) –