फ़ंक्शन-लेवेल प्रोग्रामिंग: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(5 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{redirect|function-level|the term in mental health assessments|Global Assessment of Functioning}}
{{redirect|फलन-स्तर|मानसिक स्वास्थ्य मूल्यांकन में शब्द|कार्यप्रणाली का वैश्विक मूल्यांकन}}
{{confused|functional programming}}
{{confused|फंक्शनल प्रोग्रामिंग}}
{{Programming paradigms}}
{{Programming paradigms}}


कंप्यूटर विज्ञान में, फ़ंक्शन-स्तरीय प्रोग्रामिंग, [[जॉन बैकस]] द्वारा गणितीय वस्तुओं के रूप में प्रोग्रामों पर अपने काम में पहचाने गए दो विपरीत [[प्रोग्रामिंग प्रतिमान]]ों में से को संदर्भित करता है, दूसरा [[मूल्य-स्तरीय प्रोग्रामिंग]] है।
कंप्यूटर विज्ञान में, '''फ़ंक्शन-लेवेल प्रोग्रामिंग''', [[जॉन बैकस]] द्वारा गणितीय वस्तुओं के रूप में प्रोग्रामों पर अपने कार्यों में पहचाने गए दो विपरीत [[प्रोग्रामिंग प्रतिमान|प्रोग्रामिंग प्रतिमानों (प्रोग्रामिंग पैराडिग्म्ज)]] को संदर्भित करता है, जो मुख्यतः इसकी दूसरी [[मूल्य-स्तरीय प्रोग्रामिंग|वैल्यू-लेवेल प्रोग्रामिंग]] है।


अपने 1977 के [[ ट्यूरिंग पुरस्कार |ट्यूरिंग पुरस्कार]] व्याख्यान में, बैकस ने प्रोग्रामिंग भाषा डिज़ाइन में अलग दर्शन पर स्विच करने की आवश्यकता पर विचार किया:<ref>{{cite journal|doi=10.1145/359576.359579|title=Can programming be liberated from the von Neumann style?: A functional style and its algebra of programs|journal=Communications of the ACM|volume=21|issue=8|pages=613–641|year=1978|last1=Backus|first1=John|url=https://www.cs.ucf.edu/~dcm/Teaching/COT4810-Fall%202012/Literature/Backus.pdf|doi-access=free}}</ref>
अपने 1977 के [[ ट्यूरिंग पुरस्कार |ट्यूरिंग पुरस्कार]] व्याख्यान में, बैकस ने प्रोग्रामिंग लैंग्वेज डिज़ाइन में अलग दर्शन पर स्विच करने की आवश्यकता पर विचार किया गया हैं जो इस प्रकार हैं:<ref>{{cite journal|doi=10.1145/359576.359579|title=Can programming be liberated from the von Neumann style?: A functional style and its algebra of programs|journal=Communications of the ACM|volume=21|issue=8|pages=613–641|year=1978|last1=Backus|first1=John|url=https://www.cs.ucf.edu/~dcm/Teaching/COT4810-Fall%202012/Literature/Backus.pdf|doi-access=free}}</ref>
<blockquote>[[प्रोग्रामिंग भाषा]]एँ संकट में प्रतीत होती हैं। प्रत्येक क्रमिक भाषा में, थोड़ी सी सफाई के साथ, अपने पूर्ववर्तियों की सभी विशेषताओं के साथ-साथ कुछ और भी शामिल होती हैं। [...] प्रत्येक नई भाषा नई और फैशनेबल सुविधाओं का दावा करती है... लेकिन स्पष्ट तथ्य यह है कि कुछ भाषाएँ प्रोग्रामिंग को इतना सस्ता या अधिक विश्वसनीय बनाती हैं कि उन्हें बनाने और उनका उपयोग करना सीखने की लागत को उचित ठहराया जा सके।</blockquote>
<blockquote>[[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेज]] में इस प्रकार का संकट प्रतीत होता हैं। प्रत्येक क्रमिक लैंग्वेज में इसे सही करने के साथ अपने पूर्ववर्तियों की सभी विशेषताओं के साथ-साथ कुछ और भी सम्मिलित होती हैं। प्रत्येक नई लैंग्वेज नई और फैशनेबल सुविधाओं का प्रमाण करती है, अपितु स्पष्ट रूप से यह ऐसा तथ्य है कि कुछ लैंग्वेज प्रोग्रामिंग को इतना सस्ता या अधिक विश्वसनीय बनाती हैं कि उन्हें बनाने और उनका उपयोग करने के आधार पर इसे सीखने की लागत को उचित ठहराया जाने में सहायता करती हैं।</blockquote>


उन्होंने [[एफपी (प्रोग्रामिंग भाषा)]] को विशेष रूप से फ़ंक्शन-स्तरीय प्रोग्रामिंग शैली का समर्थन करने वाली पहली प्रोग्रामिंग भाषा के रूप में डिज़ाइन किया।
उन्होंने [[एफपी (प्रोग्रामिंग भाषा)|एफपी (प्रोग्रामिंग लैंग्वेज)]] को विशेष रूप से फ़ंक्शन-लेवेल प्रोग्रामिंग शैली का समर्थन करने वाली पहली प्रोग्रामिंग लैंग्वेज के रूप में डिज़ाइन किया हैं।


एक फ़ंक्शन-स्तरीय प्रोग्राम 'वैरिएबल-फ्री' (cf. पॉइंट-फ्री प्रोग्रामिंग|पॉइंट-फ्री प्रोग्रामिंग) है, क्योंकि [[ चर (प्रोग्रामिंग) |चर (प्रोग्रामिंग)]] , जो मूल्य-स्तरीय परिभाषाओं में आवश्यक हैं, फ़ंक्शन-स्तरीय प्रोग्रामों में आवश्यक नहीं हैं।
फ़ंक्शन-लेवेल प्रोग्राम 'वैरिएबल-फ्री' मुख्य रूप से पॉइंट-फ्री प्रोग्रामिंग है, क्योंकि [[ चर (प्रोग्रामिंग) |वैरियेबल (प्रोग्रामिंग)]] , जो वैल्यू-लेवेल लैंग्वेज में आवश्यक हैं, फ़ंक्शन-लेवेल प्रोग्रामों में आवश्यक नहीं हैं।


== परिचय ==
== परिचय ==
प्रोग्रामिंग की फ़ंक्शन-स्तरीय शैली में, प्रोग्राम सीधे उन प्रोग्रामों से बनाया जाता है जो शुरुआत में दिए गए हैं, उन्हें प्रोग्राम-फॉर्मिंग ऑपरेशंस या फ़ंक्शंस के साथ जोड़कर। इस प्रकार, मूल्य-स्तरीय दृष्टिकोण के विपरीत, जो दिए गए कार्यक्रमों को ''मूल्यों का उत्तराधिकार'' बनाने के लिए मूल्यों पर लागू करता है, जो वांछित परिणाम मूल्य में परिणत होता है, फ़ंक्शन-स्तरीय दृष्टिकोण दिए गए कार्यक्रमों पर प्रोग्राम-निर्माण संचालन को लागू करता है, ताकि ''कार्यक्रमों का उत्तराधिकार'' बन सके, जिसका समापन वांछित परिणाम कार्यक्रम में होता है।
प्रोग्रामिंग की फ़ंक्शन-लेवेल शैली में, प्रोग्राम सीधे उन प्रोग्रामों से बनाया जाता है, जो मुख्यतः प्रारंभ में दिए जाते हैं, उन्हें प्रोग्राम-फॉर्मिंग ऑपरेशंस या फ़ंक्शंस के साथ जोड़कर देखा जा सकता हैं। इस प्रकार वैल्यू-लेवेल दृष्टिकोण के विपरीत, जो दिए गए कार्यक्रमों को ''मानों का उत्तराधिकार'' बनाने के लिए इन प्राप्त होने वाले मानों पर लागू करता है, जो वांछित परिणाम मूल्य में परिणत होता है, इस प्रकार फ़ंक्शन-लेवेल दृष्टिकोण दिए गए कार्यक्रमों पर प्रोग्राम-निर्माण संचालन को लागू करता है, जिससे कि ''कार्यक्रमों का उत्तराधिकार'' बन सके, जिसका समापन वांछित परिणाम कार्यक्रम में होता है।


परिणामस्वरूप, प्रोग्रामिंग के लिए फ़ंक्शन-स्तरीय दृष्टिकोण ''प्रोग्राम-फॉर्मिंग ऑपरेशंस के तहत प्रोग्रामों के स्थान'' के अध्ययन को आमंत्रित करता है, ताकि इन प्रोग्राम-फॉर्मिंग ऑपरेशंस के उपयोगी बीजगणितीय गुणों को प्राप्त किया जा सके। फ़ंक्शन-स्तरीय दृष्टिकोण ''प्रोग्रामों के स्थान'' पर प्रोग्राम-निर्माण संचालन के बीजगणितीय गुणों पर जोर देकर प्रोग्रामों के सेट को [[गणितीय वस्तुओं के रूप में प्रोग्राम]] बनाने की संभावना प्रदान करता है।
परिणामस्वरूप, प्रोग्रामिंग के लिए फ़ंक्शन-लेवेल दृष्टिकोण ''प्रोग्राम-फॉर्मिंग ऑपरेशंस के अनुसार प्रोग्रामों के स्थान'' के अध्ययन को आमंत्रित करता है, जिससे कि इन प्रोग्राम-फॉर्मिंग ऑपरेशंस के उपयोगी बीजगणितीय गुणों को प्राप्त किया जा सके। इस प्रकार फ़ंक्शन-लेवेल दृष्टिकोण ''प्रोग्रामों के स्थान'' पर प्रोग्राम-निर्माण संचालन के बीजगणितीय गुणों पर जोर देकर प्रोग्रामों के सेट को [[गणितीय वस्तुओं के रूप में प्रोग्राम|गणितीय अवयवों के रूप में प्रोग्राम]] बनाने की संभावना प्रदान करता है।


फ़ंक्शन-स्तरीय दृश्य का अन्य संभावित लाभ केवल सख्त फ़ंक्शंस का उपयोग करने की क्षमता है और इस प्रकार [[नीचे से ऊपर शब्दार्थ]] होता है, जो सभी प्रकार का सबसे सरल प्रकार है। फिर भी और फ़ंक्शन-स्तरीय परिभाषाओं का अस्तित्व है जो किसी भी मौजूदा मूल्य-स्तर की ''उठाई गई'' (अर्थात्, निचले मूल्य-स्तर से उच्च फ़ंक्शन-स्तर तक ''उठाई गई'') छवि नहीं हैं: ये (अक्सर संक्षिप्त) फ़ंक्शन-स्तरीय परिभाषाएं प्रोग्रामिंग की अधिक शक्तिशाली शैली का प्रतिनिधित्व करती हैं जो मूल्य-स्तर पर उपलब्ध नहीं है।
फ़ंक्शन-लेवेल दृश्य का अन्य संभावित लाभ केवल कठोरता से फ़ंक्शंस का उपयोग करने की क्षमता है और इस प्रकार [[नीचे से ऊपर शब्दार्थ]] होता है, जो सभी प्रकार का सबसे सरल प्रकार है। फिर भी और फ़ंक्शन-लेवेल लैंग्वेज का अस्तित्व है, जो इस प्रकार किसी भी मौजूदा वैल्यू लेवेल की ''उठाई गई'' (अर्थात्, निचले वैल्यू लेवेल से उच्च फ़ंक्शन-स्तर तक ''उठाई गई हैं'') जो इमेज नहीं हैं: ये अधिकांशतः संक्षिप्त रूप से फ़ंक्शन-लेवेल परिलैंग्वेजएं प्रोग्रामिंग की अधिक शक्तिशाली शैली का प्रतिनिधित्व करती हैं, जो वैल्यू लेवेल पर उपलब्ध नहीं है।


==कार्यात्मक प्रोग्रामिंग के विपरीत==
==फंक्शनल प्रोग्रामिंग के विपरीत==
जब बैकस ने प्रोग्रामिंग की अपनी फ़ंक्शन-स्तरीय शैली का अध्ययन और प्रचार किया, तो उनके संदेश को ज्यादातर गलत समझा गया<ref>{{cite journal|doi=10.1145/72551.72554|title=कार्यात्मक प्रोग्रामिंग भाषाओं की संकल्पना, विकास और अनुप्रयोग|journal=ACM Computing Surveys|volume=21|issue=3|pages=359–411|year=1989|last1=Hudak|first1=Paul|s2cid=207637854}}</ref> अपनी स्वयं की एफपी (प्रोग्रामिंग भाषा) और इसकी उत्तराधिकारी [[एफएल प्रोग्रामिंग भाषा]] के बजाय पारंपरिक [[कार्यात्मक प्रोग्रामिंग]] शैली भाषाओं का समर्थन करने के रूप में।
जब बैकस ने प्रोग्रामिंग की अपनी फ़ंक्शन-लेवेल शैली का अध्ययन और प्रचार किया था, जिसके आधार पर उनके संदेश को अधिकांशतः गलत समझा गया था,<ref>{{cite journal|doi=10.1145/72551.72554|title=कार्यात्मक प्रोग्रामिंग भाषाओं की संकल्पना, विकास और अनुप्रयोग|journal=ACM Computing Surveys|volume=21|issue=3|pages=359–411|year=1989|last1=Hudak|first1=Paul|s2cid=207637854}}</ref> इसके आधार पर अपनी स्वयं की एफपी प्रोग्रामिंग लैंग्वेज और इस प्रकार [[एफएल प्रोग्रामिंग भाषा|एफएल प्रोग्रामिंग लैंग्वेज]] के अतिरिक्त पारंपरिक [[कार्यात्मक प्रोग्रामिंग|फंक्शनल प्रोग्रामिंग]] शैली लैंग्वेज का समर्थन करने के रूप में उपयोग किया जाता हैं।


बैकस कार्यात्मक प्रोग्रामिंग को [[ अनुप्रयोगात्मक प्रोग्रामिंग |अनुप्रयोगात्मक प्रोग्रामिंग]] कहता है; उनकी फ़ंक्शन-स्तरीय प्रोग्रामिंग विशेष, प्रतिबंधित प्रकार है।
बैकस फंक्शनल प्रोग्रामिंग को [[ अनुप्रयोगात्मक प्रोग्रामिंग |एप्लिसेटिव प्रोग्रामिंग]] कहता है; उनकी फ़ंक्शन-लेवेल प्रोग्रामिंग विशेष, प्रतिबंधित प्रकार है।


कार्यात्मक भाषाओं से मुख्य अंतर यह है कि बैकस की भाषा में प्रकारों का निम्नलिखित पदानुक्रम है:
फंक्शनल लैंग्वेज से मुख्य अंतर यह है कि बैकस की लैंग्वेज में प्रकारों का निम्नलिखित पदानुक्रम है:
*परमाणु
*परमाणु
* कार्य, जो परमाणुओं को परमाणुओं तक ले जाते हैं
* कार्य, जो परमाणुओं को परमाणुओं तक ले जाते हैं
* उच्च-क्रम फ़ंक्शंस (जिन्हें वह कार्यात्मक रूप कहते हैं), जो फ़ंक्शंस में या दो फ़ंक्शंस लेते हैं
* उच्च-क्रम फ़ंक्शंस जिन्हें मुख्य रूप से फंक्शन कहा जाता हैं, जो फ़ंक्शंस के अन्दर दो फ़ंक्शंस का उपयोग करते हैं,
...और नए फ़ंक्शन उत्पन्न करने का एकमात्र तरीका कार्यात्मक रूपों में से का उपयोग करना है, जो निश्चित हैं: आप अपना स्वयं का कार्यात्मक फॉर्म नहीं बना सकते हैं (कम से कम एफपी के भीतर नहीं; आप एफएफपी ([[औपचारिक एफपी]]) के भीतर कर सकते हैं)।
और नए फ़ंक्शन उत्पन्न करने का एकमात्र तरीका फंक्शनल रूपों में से का उपयोग करना है, जो निश्चित हैं: आप अपना स्वयं का फंक्शनल फॉर्म नहीं बना सकते हैं, इस कारण कम से कम एफपी के भीतर नहीं अपितु एफएफपी ([[औपचारिक एफपी]]) के भीतर कर सकते हैं।


इस प्रतिबंध का मतलब है कि एफपी में फ़ंक्शन कार्यात्मक रूपों के बीजगणित पर [[मॉड्यूल (गणित)]] (अंतर्निहित कार्यों द्वारा उत्पन्न) हैं, और इस प्रकार बीजगणितीय रूप से ट्रैक करने योग्य हैं। उदाहरण के लिए, दो कार्यों की समानता का सामान्य प्रश्न [[रुकने की समस्या]] के बराबर है, और अनिर्णीत है, लेकिन एफपी में दो कार्यों की समानता केवल बीजगणित में समानता है, और इस प्रकार (बैकस कल्पना करता है) आसान है।
इस प्रतिबंध का मतलब है कि एफपी में किसी फ़ंक्शन को फंक्शनल रूपों के बीजगणित पर [[मॉड्यूल (गणित)]] अंतर्निहित कार्यों द्वारा उत्पन्न हैं, और इस प्रकार बीजगणितीय रूप से ट्रैक करने योग्य हैं। उदाहरण के लिए, दो कार्यों की समानता का सामान्य प्रश्न [[रुकने की समस्या]] के बराबर है, और अनिर्णीत है, अपितु एफपी में दो कार्यों की समानता केवल बीजगणित में समानता है, और इस प्रकार बैकस कल्पना करता है और यह साधारण प्रक्रिया है।


आज भी, [[लैम्ब्डा कैलकुलस]] भाषाओं के कई उपयोगकर्ता अक्सर लैम्ब्डा शैली के प्रतिबंधात्मक संस्करण के रूप में बैकस के फ़ंक्शन-स्तरीय दृष्टिकोण की गलत व्याख्या करते हैं, जो वास्तविक मूल्य-स्तरीय शैली है। वास्तव में, बैकस 'प्रतिबंधात्मक' आरोप से असहमत नहीं होंगे: उन्होंने तर्क दिया कि यह ऐसे प्रतिबंधों के कारण ही था कि अच्छी तरह से गठित गणितीय स्थान उत्पन्न हो सकता है, जिस तरह से [[संरचित प्रोग्रामिंग]] प्रोग्रामिंग को सादे, अप्रतिबंधित [[असंरचित प्रोग्रामिंग]] में उपलब्ध सभी नियंत्रण-प्रवाह संभावनाओं के प्रतिबंधित संस्करण तक सीमित करती है।
आज भी, [[लैम्ब्डा कैलकुलस]] लैंग्वेज के कई उपयोगकर्ता अधिकांशतः लैम्ब्डा शैली के प्रतिबंधात्मक संस्करण के रूप में बैकस के फ़ंक्शन-लेवेल दृष्टिकोण की गलत व्याख्या करते हैं, जो वास्तविक वैल्यू-लेवेल शैली है। वास्तव में, बैकस 'प्रतिबंधात्मक' आरोप से असहमत नहीं होंगे: उन्होंने तर्क दिया कि यह ऐसे प्रतिबंधों के कारण ही था कि अच्छी तरह से गठित गणितीय स्थान उत्पन्न हो सकता है, जिस प्रकार से [[संरचित प्रोग्रामिंग]] प्रोग्रामिंग को साधारण, अप्रतिबंधित [[असंरचित प्रोग्रामिंग]] में उपलब्ध सभी नियंत्रण-प्रवाह संभावनाओं के प्रतिबंधित संस्करण तक सीमित करती है।


एफपी की मूल्य-मुक्त शैली [[कार्टेशियन-बंद श्रेणी]] के समीकरण तर्क से निकटता से संबंधित है।
एफपी की वैल्यू फ्री सीरीज के लिए [[कार्टेशियन-बंद श्रेणी|कार्टेशियन-क्लोज्ड सीरीज]] के समीकरण के लिए इसके तर्क से निकटता से संबंधित रहता है।


==उदाहरण भाषाएँ==
==उदाहरण लैंग्वेज==
{{maincat|Function-level languages}}
{{maincat|फ़ंक्शन-लेवेल लैंग्वेज}}
कैनोनिकल फ़ंक्शन-स्तरीय प्रोग्रामिंग भाषा एफपी (प्रोग्रामिंग भाषा) है। अन्य में [[FL (प्रोग्रामिंग भाषा)]], और J (प्रोग्रामिंग भाषा) शामिल हैं।
 
कैनोनिकल फ़ंक्शन-लेवेल प्रोग्रामिंग लैंग्वेज एफपी (प्रोग्रामिंग लैंग्वेज) है। इस प्रकार इसके अन्य उदाहरण में [[FL (प्रोग्रामिंग भाषा)|एफएल प्रोग्रामिंग लैंग्वेज]], और जे प्रोग्रामिंग लैंग्वेज सम्मिलित हैं।


==यह भी देखें==
==यह भी देखें==
* [[कॉनटेनेटिव प्रोग्रामिंग भाषा]]
* [[कॉनटेनेटिव प्रोग्रामिंग भाषा|कॉनटेनेटिव प्रोग्रामिंग लैंग्वेज]]
* कार्यात्मक प्रोग्रामिंग, [[घोषणात्मक प्रोग्रामिंग]] (तुलना करें)
* फंक्शनल प्रोग्रामिंग, [[घोषणात्मक प्रोग्रामिंग|डिक्लेरेटिव प्रोग्रामिंग]] (तुलना करें)
* [[मौन प्रोग्रामिंग]]
* [[मौन प्रोग्रामिंग|साइलेंट प्रोग्रामिंग]]
* मूल्य-स्तरीय प्रोग्रामिंग, [[अनिवार्य प्रोग्रामिंग]] (कंट्रास्ट)
* वैल्यू-लेवेल प्रोग्रामिंग, [[अनिवार्य प्रोग्रामिंग|इम्प्रेटिव प्रोग्रामिंग]] (कंट्रास्ट)


==संदर्भ==
==संदर्भ==
Line 54: Line 55:
* Instance variables, a [https://esolangs.org/wiki/FP_trivia way out] of the variable abstinence
* Instance variables, a [https://esolangs.org/wiki/FP_trivia way out] of the variable abstinence


{{DEFAULTSORT:Function-Level Programming}}[[Category: प्रोग्रामिंग प्रतिमान]] [[Category: प्रोग्रामिंग भाषा सिद्धांत]]
{{DEFAULTSORT:Function-Level Programming}}
 
 


[[Category: Machine Translated Page]]
[[Category:Articles with hatnote templates targeting a nonexistent page|Function-Level Programming]]
[[Category:Created On 24/07/2023]]
[[Category:Created On 24/07/2023|Function-Level Programming]]
[[Category:Machine Translated Page|Function-Level Programming]]
[[Category:Missing redirects|Function-Level Programming]]
[[Category:Pages with script errors|Function-Level Programming]]
[[Category:Templates Vigyan Ready|Function-Level Programming]]
[[Category:प्रोग्रामिंग प्रतिमान|Function-Level Programming]]
[[Category:प्रोग्रामिंग भाषा सिद्धांत|Function-Level Programming]]

Latest revision as of 12:10, 17 August 2023

कंप्यूटर विज्ञान में, फ़ंक्शन-लेवेल प्रोग्रामिंग, जॉन बैकस द्वारा गणितीय वस्तुओं के रूप में प्रोग्रामों पर अपने कार्यों में पहचाने गए दो विपरीत प्रोग्रामिंग प्रतिमानों (प्रोग्रामिंग पैराडिग्म्ज) को संदर्भित करता है, जो मुख्यतः इसकी दूसरी वैल्यू-लेवेल प्रोग्रामिंग है।

अपने 1977 के ट्यूरिंग पुरस्कार व्याख्यान में, बैकस ने प्रोग्रामिंग लैंग्वेज डिज़ाइन में अलग दर्शन पर स्विच करने की आवश्यकता पर विचार किया गया हैं जो इस प्रकार हैं:[1]

प्रोग्रामिंग लैंग्वेज में इस प्रकार का संकट प्रतीत होता हैं। प्रत्येक क्रमिक लैंग्वेज में इसे सही करने के साथ अपने पूर्ववर्तियों की सभी विशेषताओं के साथ-साथ कुछ और भी सम्मिलित होती हैं। प्रत्येक नई लैंग्वेज नई और फैशनेबल सुविधाओं का प्रमाण करती है, अपितु स्पष्ट रूप से यह ऐसा तथ्य है कि कुछ लैंग्वेज प्रोग्रामिंग को इतना सस्ता या अधिक विश्वसनीय बनाती हैं कि उन्हें बनाने और उनका उपयोग करने के आधार पर इसे सीखने की लागत को उचित ठहराया जाने में सहायता करती हैं।

उन्होंने एफपी (प्रोग्रामिंग लैंग्वेज) को विशेष रूप से फ़ंक्शन-लेवेल प्रोग्रामिंग शैली का समर्थन करने वाली पहली प्रोग्रामिंग लैंग्वेज के रूप में डिज़ाइन किया हैं।

फ़ंक्शन-लेवेल प्रोग्राम 'वैरिएबल-फ्री' मुख्य रूप से पॉइंट-फ्री प्रोग्रामिंग है, क्योंकि वैरियेबल (प्रोग्रामिंग) , जो वैल्यू-लेवेल लैंग्वेज में आवश्यक हैं, फ़ंक्शन-लेवेल प्रोग्रामों में आवश्यक नहीं हैं।

परिचय

प्रोग्रामिंग की फ़ंक्शन-लेवेल शैली में, प्रोग्राम सीधे उन प्रोग्रामों से बनाया जाता है, जो मुख्यतः प्रारंभ में दिए जाते हैं, उन्हें प्रोग्राम-फॉर्मिंग ऑपरेशंस या फ़ंक्शंस के साथ जोड़कर देखा जा सकता हैं। इस प्रकार वैल्यू-लेवेल दृष्टिकोण के विपरीत, जो दिए गए कार्यक्रमों को मानों का उत्तराधिकार बनाने के लिए इन प्राप्त होने वाले मानों पर लागू करता है, जो वांछित परिणाम मूल्य में परिणत होता है, इस प्रकार फ़ंक्शन-लेवेल दृष्टिकोण दिए गए कार्यक्रमों पर प्रोग्राम-निर्माण संचालन को लागू करता है, जिससे कि कार्यक्रमों का उत्तराधिकार बन सके, जिसका समापन वांछित परिणाम कार्यक्रम में होता है।

परिणामस्वरूप, प्रोग्रामिंग के लिए फ़ंक्शन-लेवेल दृष्टिकोण प्रोग्राम-फॉर्मिंग ऑपरेशंस के अनुसार प्रोग्रामों के स्थान के अध्ययन को आमंत्रित करता है, जिससे कि इन प्रोग्राम-फॉर्मिंग ऑपरेशंस के उपयोगी बीजगणितीय गुणों को प्राप्त किया जा सके। इस प्रकार फ़ंक्शन-लेवेल दृष्टिकोण प्रोग्रामों के स्थान पर प्रोग्राम-निर्माण संचालन के बीजगणितीय गुणों पर जोर देकर प्रोग्रामों के सेट को गणितीय अवयवों के रूप में प्रोग्राम बनाने की संभावना प्रदान करता है।

फ़ंक्शन-लेवेल दृश्य का अन्य संभावित लाभ केवल कठोरता से फ़ंक्शंस का उपयोग करने की क्षमता है और इस प्रकार नीचे से ऊपर शब्दार्थ होता है, जो सभी प्रकार का सबसे सरल प्रकार है। फिर भी और फ़ंक्शन-लेवेल लैंग्वेज का अस्तित्व है, जो इस प्रकार किसी भी मौजूदा वैल्यू लेवेल की उठाई गई (अर्थात्, निचले वैल्यू लेवेल से उच्च फ़ंक्शन-स्तर तक उठाई गई हैं) जो इमेज नहीं हैं: ये अधिकांशतः संक्षिप्त रूप से फ़ंक्शन-लेवेल परिलैंग्वेजएं प्रोग्रामिंग की अधिक शक्तिशाली शैली का प्रतिनिधित्व करती हैं, जो वैल्यू लेवेल पर उपलब्ध नहीं है।

फंक्शनल प्रोग्रामिंग के विपरीत

जब बैकस ने प्रोग्रामिंग की अपनी फ़ंक्शन-लेवेल शैली का अध्ययन और प्रचार किया था, जिसके आधार पर उनके संदेश को अधिकांशतः गलत समझा गया था,[2] इसके आधार पर अपनी स्वयं की एफपी प्रोग्रामिंग लैंग्वेज और इस प्रकार एफएल प्रोग्रामिंग लैंग्वेज के अतिरिक्त पारंपरिक फंक्शनल प्रोग्रामिंग शैली लैंग्वेज का समर्थन करने के रूप में उपयोग किया जाता हैं।

बैकस फंक्शनल प्रोग्रामिंग को एप्लिसेटिव प्रोग्रामिंग कहता है; उनकी फ़ंक्शन-लेवेल प्रोग्रामिंग विशेष, प्रतिबंधित प्रकार है।

फंक्शनल लैंग्वेज से मुख्य अंतर यह है कि बैकस की लैंग्वेज में प्रकारों का निम्नलिखित पदानुक्रम है:

  • परमाणु
  • कार्य, जो परमाणुओं को परमाणुओं तक ले जाते हैं
  • उच्च-क्रम फ़ंक्शंस जिन्हें मुख्य रूप से फंक्शन कहा जाता हैं, जो फ़ंक्शंस के अन्दर दो फ़ंक्शंस का उपयोग करते हैं,

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

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

आज भी, लैम्ब्डा कैलकुलस लैंग्वेज के कई उपयोगकर्ता अधिकांशतः लैम्ब्डा शैली के प्रतिबंधात्मक संस्करण के रूप में बैकस के फ़ंक्शन-लेवेल दृष्टिकोण की गलत व्याख्या करते हैं, जो वास्तविक वैल्यू-लेवेल शैली है। वास्तव में, बैकस 'प्रतिबंधात्मक' आरोप से असहमत नहीं होंगे: उन्होंने तर्क दिया कि यह ऐसे प्रतिबंधों के कारण ही था कि अच्छी तरह से गठित गणितीय स्थान उत्पन्न हो सकता है, जिस प्रकार से संरचित प्रोग्रामिंग प्रोग्रामिंग को साधारण, अप्रतिबंधित असंरचित प्रोग्रामिंग में उपलब्ध सभी नियंत्रण-प्रवाह संभावनाओं के प्रतिबंधित संस्करण तक सीमित करती है।

एफपी की वैल्यू फ्री सीरीज के लिए कार्टेशियन-क्लोज्ड सीरीज के समीकरण के लिए इसके तर्क से निकटता से संबंधित रहता है।

उदाहरण लैंग्वेज

कैनोनिकल फ़ंक्शन-लेवेल प्रोग्रामिंग लैंग्वेज एफपी (प्रोग्रामिंग लैंग्वेज) है। इस प्रकार इसके अन्य उदाहरण में एफएल प्रोग्रामिंग लैंग्वेज, और जे प्रोग्रामिंग लैंग्वेज सम्मिलित हैं।

यह भी देखें

संदर्भ

  1. Backus, John (1978). "Can programming be liberated from the von Neumann style?: A functional style and its algebra of programs" (PDF). Communications of the ACM. 21 (8): 613–641. doi:10.1145/359576.359579.
  2. Hudak, Paul (1989). "कार्यात्मक प्रोग्रामिंग भाषाओं की संकल्पना, विकास और अनुप्रयोग". ACM Computing Surveys. 21 (3): 359–411. doi:10.1145/72551.72554. S2CID 207637854.

बाहरी संबंध