2012-06-08 15 views
5

चलें कहते हैं कि हम निम्नलिखित है:हास्केल: सूची संलयन, इसकी आवश्यकता कहाँ है?

l = map f (map g [1..100]) 

और हम क्या करना चाहते हैं:

head l 

तो हम पाते हैं:

head (map f (map g [1..100])) 

अब, हम के पहले तत्व प्राप्त करने के लिए इस। map तो जैसे कुछ परिभाषित किया गया है: तो फिर

map f l = f (head l) : (map f (tail l)) 

हम पाते हैं:

f (head (map g [1..100])) 

और फिर फिर से लागू किया:

f (g (head [1..100])) 

कौन सा

f (g 1) 

कोई मध्यवर्ती में जो परिणाम ली एसटीएस बन जाते हैं, बस आलस्य के कारण।

क्या यह विश्लेषण सही है? और इस तरह साधारण संरचनाओं के साथ:

foldl' ... $ map f1 $ map f2 $ createlist 

, मध्यवर्ती सूचियों कभी बनाया जाता है यहाँ तक कि "सूची संलयन" बिना? (मुझे लगता है कि आलस्य उन्हें छोटे से खत्म करना चाहिए)।


केवल जगह मैं एक सूची रखने के लिए एक कारण देख सकते हैं अगर हम किया था:

l' = [1..100] 
l = map f (map g l') 

हम कहाँ l' रखने के लिए, अगर यह कहीं और प्रयोग किया जाता है चाहते हो सकता है। हालांकि, यहां l' मामले में, यह कंपाइलर को स्टोर करने की तुलना में उपरोक्त सूची को फिर से समझने के लिए अपने त्वरित महसूस करने के लिए काफी छोटा होना चाहिए।

उत्तर

6

आपके map उदाहरण में सूची कक्ष बनाए जाते हैं और फिर तुरंत कचरा इकट्ठा होते हैं। सूची संलयन के साथ कोई जीसी या थंक हेरफेर (जो दोनों मुक्त नहीं हैं) की आवश्यकता है।

6

इंटरमीडिएट डेटा संरचना महंगा होने पर फ़्यूज़न लाभ सबसे अधिक लाभान्वित होते हैं। जब संरचना पारित की जा रही है आलसी है, और अनुक्रमिक तरीके से उपयोग किया जाता है, संरचना अपेक्षाकृत सस्ते हो सकती है (जैसा सूचियों के मामले में है)।

  • आलसी संरचनाओं के लिए, संलयन एक थंक बनाने के निरंतर कारक को हटा देता है, और तुरंत इसे इकट्ठा करने का कचरा हटा देता है।
  • सख्त संरचनाओं के लिए, संलयन ओ (एन) कार्य को हटा सकता है।

इस प्रकार सबसे बड़ा लाभ सख्त सरणी और इसी तरह के ढांचे के लिए हैं। हालांकि, आलसी सूचियों को भी फ्यूज करना अभी भी एक जीत है, डेटा इलाके में वृद्धि के कारण, कम मध्यवर्ती संरचनाओं को थंक्स के रूप में आवंटित किया जा रहा है।

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