मुझे this answer और this wiki page को हास्केल में ज्ञापन के लिए उत्कृष्ट परिचय के लिए मिला है। हालांकि, वे मुझे अभी भी एक प्रश्न के साथ छोड़ देते हैं कि मुझे उत्तर देने की उम्मीद है:प्रीस्कैड डेटा संरचनाओं का उपयोग करके हास्केल में ज्ञापन
ऐसा लगता है कि उपयोग की जाने वाली तकनीक के लिए आपको डेटा खोलने के लिए "खोलने" की आवश्यकता होती है (जैसा कि "आंतरिक के उपयोग में") आप अपने ज्ञापन को स्टोर करने के लिए उपयोग करते हैं। उदाहरण के लिए, 1 तालिका संरचना लागू करता है और 2section 3 में एक पेड़ लागू करता है। क्या पूर्व-निर्मित डेटा संरचना के साथ कुछ ऐसा करना संभव है? मान लीजिए, उदाहरण के लिए, आपको लगता है कि Data.Map
वास्तव में कमाल है, और इस तरह के Map
में आपके ज्ञात मानों को संग्रहीत करना चाहते हैं। क्या कोई पूर्व-निर्मित डेटा संरचना के साथ ज्ञापन तक पहुंच सकता है, जहां कोई संरचना को लागू नहीं करता है, बल्कि पूर्व-निर्मित एक का उपयोग करता है?
उम्मीद है कि कोई मुझे सामान्य रूप से कार्यात्मक ज्ञापन की मेरी गलतफहमी को सही तरीके से सोचने, या शायद अधिक संभावना के बारे में संकेत देगा।
संपादित करें: मैं एक ही रास्ता के लगता है कि यह क्या करने के लिए कर सकते हैं, लेकिन यह सब पर सुंदर नहीं है: यदि f :: a -> b
, तो एक शायद आसानी से एक memoized संस्करण f' :: Map a b -> a -> (Map a b, b)
, जहां पहला तर्क Memoization भंडारण है बना सकते हैं, और आउटपुट जोड़ी में संभावित रूप से अद्यतन स्टोरेज और गणना मूल्य शामिल है। यह राज्य-गुजर निश्चित रूप से वह नहीं है जो मैं चाहता हूं (हालांकि मुझे लगता है कि इसे एक मोनैड में लपेटा जा सकता है, लेकिन 1 और 2 में दृष्टिकोण की तुलना में यह बहुत अधिक है।
संपादित करें 2: शायद यह मेरे वर्तमान तरीके (गलत) विचार को आजमाने और व्यक्त करने में मदद करता है। वर्तमान में, मैं बार-बार, अपने आप को खींचने के लिए, मेरे मर्जी के खिलाफ गैर समाधान
import qualified Data.Map as Map
memo :: (Ord a) => [a] -> (a -> b) -> (a -> b)
memo domain f = (Map.!) storage
where
storage = Map.fromList (zip domain (map f domain))
में लग रहे हैं और मैं इस पर टकटकी, और अधिक मुझे लगता है कि मैं कुछ बुनियादी गलत समझा गया है। आप देखते हैं, मुझे लगता है कि मेरा memo [True, False]
1 के ज्ञापन के बराबर है।
उह। दान के जवाब को पढ़ते हुए, मैं आश्वस्त हो गया कि वास्तव में "संपादन 2" में कोड के साथ कुछ भी गलत नहीं है। यह पता चला कि मैं सिर्फ गलत तरीके से प्रोफाइलिंग कर रहा था। यह ठीक काम कर रहा है :-) – gspr