सबसे पहले मैं एक हास्केल नौसिखिया हूं। मैंने इसे पढ़ा है: Immutable functional objects in highly mutable domain और मेरा प्रश्न लगभग समान है - कैसे एल्गोरिदम को कुशलतापूर्वक लिखना है जहां राज्य को बदलना है। चलिए उदाहरण के लिए डिजस्ट्रा के एल्गोरिदम लेते हैं। नए पथ पाए जाएंगे और दूरी अपडेट की जानी चाहिए। और पारंपरिक भाषाओं में यह आसान है जबकि हास्केल में उदाहरण के लिए मैं केवल पूरी तरह से नई दूरी बनाने के बारे में सोच सकता हूं जो बहुत धीमी और स्मृति उपभोग करेगा। क्या ऐसे मामलों के लिए डिज़ाइन पैटर्न की तरह कुछ है जहां किसी को म्यूटेबल डेटा स्ट्रक्चर और स्पीड और मेमोरी उपयोग के साथ एल्गोरिदम लागू करना चाहिए मुख्य चिंताएं हैं?कार्यात्मक प्रोग्रामिंग में व्यवहार्यता
उत्तर
निश्चित रूप से कार्यात्मक भाषाएं इस समस्या को हल करने के कई तरीके हैं।
विभिन्न डेटा संरचनाओं - कई डाटा संरचनाओं एक पूरी तरह कार्यात्मक तरीके से लागू किया जा सकता है, जरूरी संस्करणों के रूप में ही एल्गोरिथम जटिलता के साथ। शायद इस क्षेत्र में सबसे प्रसिद्ध काम क्रिस ओकासाकी का Purely Functional Data Structures है, लेकिन कई अन्य संसाधन भी हैं। डिजस्ट्रा के एल्गोरिदम के लिए, Martin Erwig का काम functional graphs पर उचित है। this question भी देखें।
विभिन्न एल्गोरिदम - कुछ एल्गोरिदम में अंतर्निहित उत्परिवर्तन की धारणाएं हैं, क्विक्सोर्ट इसका एक उदाहरण है। इस मामले में एक वैकल्पिक एल्गोरिदम का उपयोग किया जा सकता है जो अपरिवर्तनीयता के लिए अधिक उपयुक्त है।
उत्परिवर्तनीय राज्य - प्रत्येक कार्यात्मक भाषा राज्य मोनैड के साथ कार्यात्मक स्थिति का मॉडल कर सकती है। अधिकांश अन्य प्रकार के उत्परिवर्तन भी प्रदान करते हैं, जैसे हास्केल के एसटी मोनैड और आईओआरआईएफ।
ST Monad आपको आंतरिक रूप से उत्परिवर्तनीय स्थिति का उपयोग करने देता है, लेकिन एक शुद्ध बाहरी इंटरफ़ेस प्रस्तुत करता है।
नई अपरिवर्तनीय वस्तुओं को बनाना लगभग उतना ही खर्च नहीं है जितना आप सोच सकते हैं, क्योंकि बड़ी मात्रा में संरचनात्मक साझाकरण हो सकता है क्योंकि संकलक केएनओएस वे बदल नहीं सकते हैं और इस प्रकार सुरक्षित रूप से साझा किए जा सकते हैं। उस ने कहा, हास्केल में बहुत से उत्परिवर्तनीय राज्य के साथ अत्यधिक अनिवार्य एल्गोरिदम का उपयोग कोड कोड की थोड़ी सी है।
एमएल डेरिवेटिव (जैसे OCaml, एसएमएल, एफ # के रूप में), वहाँ "संदर्भ" है, जो परिवर्तनशील चर के रूप में इस्तेमाल किया जा सकता है।
हास्केल में, यह साफ़ रूप से संभाला नहीं जाता है। राज्य को सामान्य "पूरी तरह कार्यात्मक" शैली से ढंक नहीं किया जाता है। शुद्ध एफपी भाषाएं "अनन्त सत्य" से निपटती हैं, और इस प्रकार "क्षणिक सत्य" के साथ काम करने के लिए बहुत उपयुक्त नहीं हैं (हालांकि यह निश्चित रूप से किया जा सकता है)।
हालांकि, हाँ, कभी कभी हम परिवर्तनशील राज्य की जरूरत है । ATS जैसी भाषाएं विनाशकारी अपडेट और सुरक्षित संसाधन मैनिपुलेशन को संभालने के लिए रैखिक प्रकार शामिल करती हैं।
- 1. जावा में कार्यात्मक प्रोग्रामिंग
- 2. कार्यात्मक प्रोग्रामिंग
- 3. कार्यात्मक प्रोग्रामिंग
- 4. स्कैला में कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग
- 5. परमाणु संयंत्रों में कार्यात्मक प्रोग्रामिंग?
- 6. कार्यात्मक प्रोग्रामिंग भाषा में सीएमएस
- 7. कार्यात्मक प्रोग्रामिंग में बिग डेटास्ट्रक्चर
- 8. कार्यात्मक प्रोग्रामिंग में निर्भरता इंजेक्शन
- 9. कार्यात्मक प्रोग्रामिंग: साइड इफेक्ट्स
- 10. कार्यात्मक प्रोग्रामिंग लागू किया
- 11. एक कार्यात्मक प्रोग्रामिंग पैराडिग
- 12. हास्केल - कार्यात्मक प्रोग्रामिंग सहायता
- 13. शुद्ध कार्यात्मक प्रोग्रामिंग
- 14. फ़्लोचार्टिंग कार्यात्मक प्रोग्रामिंग भाषाएं
- 15. कार्यात्मक प्रोग्रामिंग भाषा आत्मनिरीक्षण
- 16. सीखना कार्यात्मक प्रोग्रामिंग
- 17. कठोर कार्यात्मक प्रोग्रामिंग
- 18. कार्यात्मक प्रोग्रामिंग दस्तावेज़ीकरण
- 19. कार्यात्मक प्रोग्रामिंग अनिवार्य प्रोग्रामिंग का सबसेट है?
- 20. कार्यात्मक प्रोग्रामिंग के लिए सोलिड
- 21. कार्यात्मक प्रोग्रामिंग और मल्टीकोर आर्किटेक्चर
- 22. "कुल कार्यात्मक प्रोग्रामिंग" क्या है?
- 23. कार्यात्मक प्रोग्रामिंग और टाइप सिस्टम
- 24. कार्यात्मक प्रोग्रामिंग: सर्वश्रेष्ठ प्लेटफ़ॉर्म/पर्यावरण
- 25. कार्यात्मक प्रोग्रामिंग (ओकैम) में हस्ताक्षर/प्रकार
- 26. कार्यात्मक प्रोग्रामिंग में मूल अवधारणाएं क्या हैं?
- 27. कार्यात्मक शैली प्रोग्रामिंग के बारे में
- 28. कार्यात्मक प्रोग्रामिंग में सीक्वेंसिंग को समझना
- 29. स्कैला में प्रोग्रामिंग से कार्यात्मक कतार
- 30. कार्यात्मक प्रोग्रामिंग + डोमेन-संचालित डिजाइन
अफसोस की बात है, आलसी कार्यात्मक अपरिवर्तनीय भाषाओं के लिए उपयुक्त डेटा संरचनाओं और एल्गोरिदम में अनुसंधान सख्त अनिवार्य उत्परिवर्तनीय भाषाओं के लिए पीछे है। :-( – ephemient