2011-12-30 12 views
5

स्पष्ट रूप से हास्केल को कार्यान्वित करना संभव है जैसे कि यह भाषा के अर्थशास्त्र को बदले बिना बेसब्री से मूल्यांकन करता है। यदि यह सत्य है, अनंत डेटा संरचनाओं को कैसे प्रबंधित किया जाता है?आलसी बनाम आलसी हास्केल। उत्सुक भाषाओं में अनंत सूची संभव है?

http://csg.csail.mit.edu/pubs/haskell.html

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

कुंजी चीज नहीं जा रहा है "हम अगर हमारे कार्यक्रम भी उत्सुक है ठीक करने के लिए तंत्र है"। ये तंत्र क्या हैं? वे असीमित डेटा संरचनाओं और आलसी मूल्यांकन के अन्य पहलुओं के लिए कैसे अनुमति देते हैं जिन्हें मुझे विश्वास है कि एक उत्सुक भाषा में असंभव है?

+3

आपके द्वारा लिंक किया गया पृष्ठ तंत्र के बारे में एक अवलोकन प्रदान करता है। क्या आप कुछ विशिष्ट स्पष्ट करना चाहते थे? –

+0

हाँ मुझे अभी एहसास हुआ कि जब मैंने पढ़ना जारी रखा था। पहले पूरी चीज पढ़नी चाहिए थी। मैं मूर्ख की तरह महसूस करता हूं: पी एसओ प्रक्रिया क्या है जब कोई इस तरह गलती करता है? क्या मुझे सवाल हटा देना चाहिए? – TheIronKnuckle

+0

बस सवाल बंद करना आमतौर पर ठीक है।एहर्ड का जवाब वैसे भी उपयोगी है, और जानकारी को संरक्षित करने के पक्ष में गलती करना बेहतर है। –

उत्तर

11

यह सच नहीं है: यदि आप साबित कर सकते हैं कि वे को अलग नहीं करेंगे तो आप हास्केल शब्दों को उत्सुकता से का मूल्यांकन कर सकते हैं।

उदाहरण के लिए, जब आप f x देखने के लिए, पहले आपको एक्स (रोक अगर आप WHNF (कमजोर सिर सामान्य फार्म) या कोई त्रुटि तक पहुँचने) के 1,000 कदम पर अमल कर सकता है, और फिर इसे को पारित - अर्थशास्त्र संरक्षित हैं, लेकिन यदि आपको लगता है कि x का मूल्यांकन किया जा रहा है, तो आप ऑप्टिमाइज़ेशन के रूप में समय से पहले ऐसा करने की व्यवस्था कर सकते हैं।

यदि x = fix id, तो यह कहीं भी नहीं जाने के 1,000 चरणों के बाद छोड़ देगा। यदि x = undefined है, तो यह एक त्रुटि उत्पन्न करेगा और छोड़ देगा (मूल थंक को बहाल कर देगा और इसे f पर पास कर देगा)। और इसी तरह।

तो x = [1..], तो यह ऊपर 1 : 2 : 3 : ... : 999 : 1000 : [1001..] करने के लिए इसे कम करने के अंत सकता है, सीमा तक पहुँच है, और वहाँ बंद करो, चलिए परिणाम गुजर।

असल में: यह साबित करके कि एक अभिव्यक्ति अलग नहीं हो सकती है, या मूल्यांकन को बाध्य नहीं कर सकती है ताकि चीजें समाप्त हो जाएं। अर्थशास्त्र में कोई बदलाव नहीं, और संभवतः प्रदर्शन में एक बड़ा सुधार।

बेशक

, नकारात्मक पक्ष यह है कि अगर एक्स पता चला है वास्तव में कुछ महंगा गणना कि केवल के आधे का उपयोग करता हो, तो आप समय बर्बाद कर 1,000 कमी चरणों खर्च करेंगे है। और [1..] के मामले में, आप सूची को स्टोर करने के लिए बहुत सारी मेमोरी का उपयोग कर समाप्त कर सकते हैं; यदि एफ एक समय में सूची को एक तत्व को संसाधित करता है, हर बार सिर को फेंक देता है, तो आप स्मृति बर्बाद कर देंगे। यही कारण है कि यह मुश्किल है :)

आपके द्वारा मूल रूप से लिंक किया गया पृष्ठ उपयोग की जाने वाली विशिष्ट तकनीकों के बारे में अधिक जानकारी में जाता है।

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