2012-09-12 24 views
6

संभव डुप्लिकेट:
When is memoization automatic in GHC Haskell?हास्केल और शुद्ध समारोह के Memoization परिणाम

परिणामस्वरूप, शुद्ध समारोह हमेशा एक निश्चित इनपुट के लिए एक ही मान देता है। उस ने कहा, यदि हास्केल (अधिक सटीक जीएचसी) स्वचालित रूप से कैश (ज्ञापन) करता है तो पर्याप्त परिणाम (प्रश्न 1) होता है और क्या डेवलपर पर इसका कोई नियंत्रण होता है (प्रश्न 2)?

+1

@LoganCapaldo ओह, हाँ, मैं देखता हूं। लेकिन वह पोस्ट लगभग 2 साल पुरानी है, शायद कुछ प्रगति हुई थी। – Cartesius00

+3

यदि आप अपने प्रश्न को ए में संपादित करते हैं) बी को स्वीकार करें और बी) स्पष्ट करें कि मूल के जवाब की तुलना में "प्रगति" का अर्थ क्या है और क्यों या क्यों "प्रगति" नहीं होती है, वहां कुछ मूल्यवान उत्तर हो सकते हैं। मैं इसमें शामिल होने के लिए तैयार नहीं हूं, लेकिन मुझे लगता है कि आप पाएंगे कि आप जिस प्रकार की कल्पना कर रहे हैं उसका स्वचालित ज्ञापन पहली ब्लश पर दिखाई दे सकता है की तुलना में कीड़े का एक बड़ा कर सकता है। –

उत्तर

11

मैं बंद करने के लिए वोट दिया है, लेकिन संक्षिप्त उत्तर:

GHC कार्यों के किसी भी स्वत: Memoization ऐसा नहीं करता है, और कहा कि शायद एक अच्छी बात है क्योंकि यह अंतरिक्ष जटिलता और भी कठिन बारे में तर्क करने बनाना होगा है। साथ ही, ज्ञापन सामान्य रूप से एक बहुत ही हल करने योग्य समस्या नहीं है, क्योंकि इसके लिए कार्य की तर्क समानता के लिए तुलनीय है जो सभी प्रकारों (उदाहरण के लिए, फ़ंक्शंस) के लिए वास्तव में संभव नहीं है।

हास्केल में गैर-सख्त अर्थशास्त्र है। जीएचसी एक, कम या ज्यादा, आवश्यकता लागत मॉडल द्वारा कॉल प्रदान करता है। हालांकि उच्च अनुकूलन स्तर पर आलसी मूल्यांकन के उपरिवहन कठोरता विश्लेषक की वजह से खराब नहीं है।

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

fib' :: (Integer -> Integer) -> Integer -> Integer 
fib' f 0 = 0 
fib' f 1 = 1 
fib' f n | n > 1 = (f (n - 1)) + ((f (n - 2)) 

slow_fib :: Integer -> Integer 
slow_fib = fib' slow_fib 

fibs :: [Integer] 
fibs = map (fib' memo_fib) [0..] 

memo_fib :: Integer -> Integer 
memo_fib n = fibs !! n 

यह वास्तव में तेज़ नहीं है, और एक अंतरिक्ष रिसाव है, लेकिन सामान्य विचार को कैप्चर करता है। आप learn more on the Haskell wiki कर सकते हैं।

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