2012-03-25 16 views
6
में एक सूची बनाने

मैं हाल ही में तरह यहाँ प्रविष्टि की एक बहुत ही स्पष्ट कार्यान्वयन नहीं था:"unlazy" clojure

Insertion sort in clojure throws StackOverFlow error

  • जो तथ्य यह है कि concat के कारण, एक स्मृति अतिप्रवाह से ग्रस्त आलसी सूचियों में शामिल हो जाता है। मैं सोच रहा था:

जब हम बड़े संग्रह पर बेहतर प्रदर्शन चाहते हैं तो हम "डी-लज़ीइंग" सूची में क्या रणनीतियां लागू कर सकते हैं?

+0

हम्म ... कुछ और googling के बाद, यह स्पष्ट है कि इस सवाल का सरल जवाब संग्रह को लपेटने के लिए "डोल" फ़ंक्शन का उपयोग करके है। हालांकि, मुझे लगता है कि यहां कुछ गठजोड़ हो सकते हैं जो इसके बारे में जानना उपयोगी हो सकता है। – jayunit100

उत्तर

5

doall आलसी मूल्यांकन को मजबूर करने के लिए निश्चित रूप से ठीक है।

याद रखने के लिए एक और उपयोगी बात यह है कि reduce गैर आलसी है। इसलिए यह बड़ी गणना में बहुत उपयोगी हो सकता है कि यह सुनिश्चित करने के लिए कि मध्यवर्ती परिणामों का मूल्यांकन किया जाए और गणना की आय से पहले एक आउटपुट मूल्य में कमी हो।

+0

मैं डाउनवोट को काफी समझ नहीं पा रहा हूं। 'डोल' नौकरी करेगा और एक वेक्टर में जमा 'कम' भी एक समाधान प्रदान करता है, जिसे तत्काल खारिज नहीं किया जाना चाहिए। परिणाम में तेजी से यादृच्छिक पहुंच है जो कुछ अनुप्रयोगों के लिए दिलचस्प हो सकती है। (उस ने कहा: परिणामी अनुक्रम के आसपास एक 'vec' भी एक ही परिणाम देगा।) – kotarak

+0

मैं सहमत हूं कि सभी काम करेंगे ... असल में, यह काम करता है मैंने इस प्रश्न को पोस्ट करने के बाद ही अन्य संदर्भित पोस्ट के बारे में कोशिश की । कृपया टिप्पणी करें। – jayunit100