7

सामान्य रूप से कार्यात्मक भाषाओं से जुड़े कौन सी तकनीकों या प्रतिमानों को उत्पादक भाषाओं में भी उपयोग किया जा सकता है?अनिवार्य भाषाओं में कौन सी कार्यात्मक भाषा तकनीकों का उपयोग किया जा सकता है?

जैसे:

  • Recursion पूंछ-कॉल अनुकूलन के बिना भाषाओं में समस्याएं खड़ी कर सकता मामलों के सीमित सेट करने के लिए इसके उपयोग को सीमित करने, ताकि
  • मानचित्र और फिल्टर में अपना रास्ता मिल गया है सीमित उपयोगिता के है गैर-कार्यात्मक भाषाएं, भले ही उनके पास एक कार्यात्मक प्रकार का अनुभव हो,

मुझे वास्तव में कार्यात्मक भाषाओं में राज्य के बारे में चिंता करने की आवश्यकता नहीं है। अगर मैं विशेष रूप से जिद्दी थे तो मैं चर को संशोधित किए बिना सी प्रोग्राम लिख सकता हूं, केवल कार्यों में पारित चरों में और कार्यों से लौटाए गए चर में मेरे राज्य को केवल encapsulating।

भले ही फ़ंक्शन प्रथम श्रेणी मान नहीं हैं, फिर भी मैं जावा में किसी ऑब्जेक्ट में एक को लपेट सकता हूं, और इसे किसी अन्य विधि में पास कर सकता हूं। कार्यात्मक प्रोग्रामिंग की तरह, बस कम मज़ा।

तो, कार्यात्मक प्रोग्रामिंग के दिग्गजों के लिए, जब आप अनिवार्य भाषाओं में प्रोग्राम करते हैं, तो आपने एफपी से क्या विचार सफलतापूर्वक लागू किए हैं?

+2

प्रेरणा: मैं हास्केल के साथ प्यार में पड़ रहा हूं। मैं हैकेल से शादी करने जा रहा हूं और उसके बच्चे हैं। –

+1

मैंने सोचा कि हास्केल एक लड़का था। – MichaelGG

+2

ला ला ला ला ला मैं नहीं सुन रहा हूँ। –

उत्तर

11

उनमें से लगभग सभी?

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

वापस डॉन ऑफ टाइम पर हम "युग्मन" और "एकजुटता" के बारे में चिंता करते थे। एक एफपी सीखना आपको इष्टतम (न्यूनतम) युग्मन, और उच्च संयोजन के साथ सिस्टम लिखने के लिए प्रेरित करेगा।

3

प्रथम श्रेणी के कार्यों में वास्तव में कार्यात्मक कार्यक्रम लिखने पर एक डैपर नहीं डालता है, लेकिन ऐसी कुछ चीजें हैं जिन्हें आप कर सकते हैं जिनकी आवश्यकता नहीं है। सबसे पहले उत्परिवर्तनीय स्थिति को छोड़ना है - अपने अधिकांश वर्गों को नई वस्तुओं को वापस करने का प्रयास करें जो आंतरिक रूप से परिवर्तन करने के बजाय संशोधित स्थिति का प्रतिनिधित्व करते हैं। उदाहरण के तौर पर, यदि आप add ऑपरेशन के साथ एक लिंक की गई सूची लिख रहे थे, तो आप ऑब्जेक्ट को संशोधित करने के विरोध में नई लिंक्ड सूची add से वापस लौटना चाहेंगे।

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

6

जिन कारणों से कोई गैर एफपी भाषा में एफपी कर के रास्ते में कर रहे हैं:

  • भाषा लैम्ब्डा/बंद समर्थन नहीं करता है, और के लिए किसी भी वाक्यात्मक चीनी नहीं है आसानी से इसे ज्यादातर हैक, आप पानी में मर चुके हैं। आप बंद किए बिना मानचित्र/फ़िल्टर को कॉल नहीं करते हैं।
  • यदि भाषा स्थैतिक रूप से टाइप की गई है और जेनेरिक का समर्थन नहीं करती है, तो आप पानी में मर चुके हैं। सभी अच्छी एफपी सामग्री जेनेरिकिटी का उपयोग करती है।
  • यदि भाषा पूंछ-रिकर्सन का समर्थन नहीं करती है, तो आप बाधा डाल रहे हैं। आप उदाहरण के कार्यान्वयन लिख सकते हैं 'मानचित्र' iteratively; अक्सर आपका डेटा बहुत बड़ा नहीं हो सकता है और रिकर्सन ठीक रहेगा।
  • यदि भाषा बीजगणितीय डेटा प्रकार और पैटर्न-मिलान का समर्थन नहीं करती है, तो आप हल्के से बाधित होंगे। एक बार जब आप उन्हें स्वाद लेते हैं तो उन्हें न केवल परेशान करना।
  • यदि भाषा कक्षाएं टाइप नहीं कर सकती है, तो ठीक है, ओह ठीक है ... आप इसे प्राप्त करेंगे, लेकिन अगर यह केवल सबसे अजीब विशेषता नहीं है, लेकिन हास्केल अच्छी सहायता के साथ एकमात्र दूरस्थ रूप से लोकप्रिय भाषा है।
+0

यह सही उत्तर है, स्वीकृत नहीं। –

3

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

सभी प्रकार के आवेदक डेटा संरचनाएं और पुनरावर्ती कार्य अनिवार्य भाषाओं में अच्छी तरह से काम करते हैं।

बातें मैं सबसे याद आती है:

  • लगभग कोई जरूरी भाषाओं हर पूंछ कॉल का अनुकूलन करने की गारंटी।

  • मुझे कोई अनिवार्य भाषा नहीं है जो पैटर्न मिलान द्वारा केस विश्लेषण का समर्थन करता है।

0

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन उदाहरण के साथ जवाब this video on infoQ कि कुछ गहराई में यह में चला जाता है के रूप में देखा जा सकता है।