फ़ंक्शन-लेवेल प्रोग्रामिंग: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{redirect| | {{redirect|फलन-स्तर|मानसिक स्वास्थ्य मूल्यांकन में शब्द|कार्यप्रणाली का वैश्विक मूल्यांकन}} | ||
{{confused| | {{confused|फंक्शनल प्रोग्रामिंग}} | ||
{{Programming paradigms}} | {{Programming paradigms}} | ||
कंप्यूटर विज्ञान में, फ़ंक्शन- | कंप्यूटर विज्ञान में, '''फ़ंक्शन-लेवेल प्रोग्रामिंग''', [[जॉन बैकस]] द्वारा गणितीय वस्तुओं के रूप में प्रोग्रामों पर अपने काम में पहचाने गए दो विपरीत [[प्रोग्रामिंग प्रतिमान|प्रोग्रामिंग प्रतिमानों]] में से को संदर्भित करता है, जो मुख्यतः इसका दूसरा [[मूल्य-स्तरीय प्रोग्रामिंग|वैल्यू-लेवेल प्रोग्रामिंग]] है। | ||
अपने 1977 के [[ ट्यूरिंग पुरस्कार |ट्यूरिंग पुरस्कार]] व्याख्यान में, बैकस ने प्रोग्रामिंग | अपने 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> | ||
उन्होंने [[एफपी (प्रोग्रामिंग भाषा)]] को विशेष रूप से फ़ंक्शन- | उन्होंने [[एफपी (प्रोग्रामिंग भाषा)|एफपी (प्रोग्रामिंग लैंग्वेज)]] को विशेष रूप से फ़ंक्शन-लेवेल प्रोग्रामिंग शैली का समर्थन करने वाली पहली प्रोग्रामिंग लैंग्वेज के रूप में डिज़ाइन किया हैं। | ||
फ़ंक्शन-लेवेल प्रोग्राम 'वैरिएबल-फ्री' मुख्य रूप से पॉइंट-फ्री प्रोग्रामिंग है, क्योंकि [[ चर (प्रोग्रामिंग) |वैरियेबल (प्रोग्रामिंग)]] , जो वैल्यू-लेवेल लैंग्वेज में आवश्यक हैं, फ़ंक्शन-लेवेल प्रोग्रामों में आवश्यक नहीं हैं। | |||
== परिचय == | == परिचय == | ||
प्रोग्रामिंग की फ़ंक्शन- | प्रोग्रामिंग की फ़ंक्शन-लेवेल शैली में, प्रोग्राम सीधे उन प्रोग्रामों से बनाया जाता है, जो मुख्यतः प्रारंभ में दिए जाते हैं, उन्हें प्रोग्राम-फॉर्मिंग ऑपरेशंस या फ़ंक्शंस के साथ जोड़कर देखा जा सकता हैं। इस प्रकार वैल्यू-लेवेल दृष्टिकोण के विपरीत, जो दिए गए कार्यक्रमों को ''मूल्यों का उत्तराधिकार'' बनाने के लिए मूल्यों पर लागू करता है, जो वांछित परिणाम मूल्य में परिणत होता है, इस प्रकार फ़ंक्शन-लेवेल दृष्टिकोण दिए गए कार्यक्रमों पर प्रोग्राम-निर्माण संचालन को लागू करता है, जिससे कि ''कार्यक्रमों का उत्तराधिकार'' बन सके, जिसका समापन वांछित परिणाम कार्यक्रम में होता है। | ||
परिणामस्वरूप, प्रोग्रामिंग के लिए फ़ंक्शन- | परिणामस्वरूप, प्रोग्रामिंग के लिए फ़ंक्शन-लेवेल दृष्टिकोण ''प्रोग्राम-फॉर्मिंग ऑपरेशंस के अनुसार प्रोग्रामों के स्थान'' के अध्ययन को आमंत्रित करता है, जिससे कि इन प्रोग्राम-फॉर्मिंग ऑपरेशंस के उपयोगी बीजगणितीय गुणों को प्राप्त किया जा सके। इस प्रकार फ़ंक्शन-लेवेल दृष्टिकोण ''प्रोग्रामों के स्थान'' पर प्रोग्राम-निर्माण संचालन के बीजगणितीय गुणों पर जोर देकर प्रोग्रामों के सेट को [[गणितीय वस्तुओं के रूप में प्रोग्राम|गणितीय अवयवों के रूप में प्रोग्राम]] बनाने की संभावना प्रदान करता है। | ||
फ़ंक्शन- | फ़ंक्शन-लेवेल दृश्य का अन्य संभावित लाभ केवल कठोरता से फ़ंक्शंस का उपयोग करने की क्षमता है और इस प्रकार [[नीचे से ऊपर शब्दार्थ]] होता है, जो सभी प्रकार का सबसे सरल प्रकार है। फिर भी और फ़ंक्शन-लेवेल लैंग्वेज का अस्तित्व है, जो इस प्रकार किसी भी मौजूदा मूल्य-स्तर की ''उठाई गई'' (अर्थात्, निचले मूल्य-स्तर से उच्च फ़ंक्शन-स्तर तक ''उठाई गई'') इमेज नहीं हैं: ये (अधिकांशतः संक्षिप्त) फ़ंक्शन-लेवेल परिलैंग्वेजएं प्रोग्रामिंग की अधिक शक्तिशाली शैली का प्रतिनिधित्व करती हैं जो मूल्य-स्तर पर उपलब्ध नहीं है। | ||
== | ==फंक्शनल प्रोग्रामिंग के विपरीत== | ||
जब बैकस ने प्रोग्रामिंग की अपनी फ़ंक्शन- | जब बैकस ने प्रोग्रामिंग की अपनी फ़ंक्शन-लेवेल शैली का अध्ययन और प्रचार किया, तो उनके संदेश को ज्यादातर गलत समझा गया<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| | {{maincat|फ़ंक्शन-लेवेल लैंग्वेज}} | ||
कैनोनिकल फ़ंक्शन- | |||
कैनोनिकल फ़ंक्शन-लेवेल प्रोग्रामिंग लैंग्वेज एफपी (प्रोग्रामिंग लैंग्वेज) है। अन्य में [[FL (प्रोग्रामिंग भाषा)|एफएल प्रोग्रामिंग लैंग्वेज]], और जे प्रोग्रामिंग लैंग्वेज सम्मिलित हैं। | |||
==यह भी देखें== | ==यह भी देखें== | ||
* [[कॉनटेनेटिव प्रोग्रामिंग भाषा]] | * [[कॉनटेनेटिव प्रोग्रामिंग भाषा|कॉनटेनेटिव प्रोग्रामिंग लैंग्वेज]] | ||
* | * फंक्शनल प्रोग्रामिंग, [[घोषणात्मक प्रोग्रामिंग]] (तुलना करें) | ||
* [[मौन प्रोग्रामिंग]] | * [[मौन प्रोग्रामिंग]] | ||
* | * वैल्यू-लेवेल प्रोग्रामिंग, [[अनिवार्य प्रोग्रामिंग]] (कंट्रास्ट) | ||
==संदर्भ== | ==संदर्भ== |
Revision as of 17:52, 4 August 2023
कंप्यूटर विज्ञान में, फ़ंक्शन-लेवेल प्रोग्रामिंग, जॉन बैकस द्वारा गणितीय वस्तुओं के रूप में प्रोग्रामों पर अपने काम में पहचाने गए दो विपरीत प्रोग्रामिंग प्रतिमानों में से को संदर्भित करता है, जो मुख्यतः इसका दूसरा वैल्यू-लेवेल प्रोग्रामिंग है।
अपने 1977 के ट्यूरिंग पुरस्कार व्याख्यान में, बैकस ने प्रोग्रामिंग लैंग्वेज डिज़ाइन में अलग दर्शन पर स्विच करने की आवश्यकता पर विचार किया गया हैं जो इस प्रकार हैं:[1]
प्रोग्रामिंग लैंग्वेज में इस प्रकार का संकट प्रतीत होता हैं। प्रत्येक क्रमिक लैंग्वेज में इसे सही करने के साथ अपने पूर्ववर्तियों की सभी विशेषताओं के साथ-साथ कुछ और भी सम्मिलित होती हैं। [...] प्रत्येक नई लैंग्वेज नई और फैशनेबल सुविधाओं का प्रमाण करती है, अपितु स्पष्ट रूप से यह ऐसा तथ्य है कि कुछ लैंग्वेज प्रोग्रामिंग को इतना सस्ता या अधिक विश्वसनीय बनाती हैं कि उन्हें बनाने और उनका उपयोग करना सीखने की लागत को उचित ठहराया जा सके।
उन्होंने एफपी (प्रोग्रामिंग लैंग्वेज) को विशेष रूप से फ़ंक्शन-लेवेल प्रोग्रामिंग शैली का समर्थन करने वाली पहली प्रोग्रामिंग लैंग्वेज के रूप में डिज़ाइन किया हैं।
फ़ंक्शन-लेवेल प्रोग्राम 'वैरिएबल-फ्री' मुख्य रूप से पॉइंट-फ्री प्रोग्रामिंग है, क्योंकि वैरियेबल (प्रोग्रामिंग) , जो वैल्यू-लेवेल लैंग्वेज में आवश्यक हैं, फ़ंक्शन-लेवेल प्रोग्रामों में आवश्यक नहीं हैं।
परिचय
प्रोग्रामिंग की फ़ंक्शन-लेवेल शैली में, प्रोग्राम सीधे उन प्रोग्रामों से बनाया जाता है, जो मुख्यतः प्रारंभ में दिए जाते हैं, उन्हें प्रोग्राम-फॉर्मिंग ऑपरेशंस या फ़ंक्शंस के साथ जोड़कर देखा जा सकता हैं। इस प्रकार वैल्यू-लेवेल दृष्टिकोण के विपरीत, जो दिए गए कार्यक्रमों को मूल्यों का उत्तराधिकार बनाने के लिए मूल्यों पर लागू करता है, जो वांछित परिणाम मूल्य में परिणत होता है, इस प्रकार फ़ंक्शन-लेवेल दृष्टिकोण दिए गए कार्यक्रमों पर प्रोग्राम-निर्माण संचालन को लागू करता है, जिससे कि कार्यक्रमों का उत्तराधिकार बन सके, जिसका समापन वांछित परिणाम कार्यक्रम में होता है।
परिणामस्वरूप, प्रोग्रामिंग के लिए फ़ंक्शन-लेवेल दृष्टिकोण प्रोग्राम-फॉर्मिंग ऑपरेशंस के अनुसार प्रोग्रामों के स्थान के अध्ययन को आमंत्रित करता है, जिससे कि इन प्रोग्राम-फॉर्मिंग ऑपरेशंस के उपयोगी बीजगणितीय गुणों को प्राप्त किया जा सके। इस प्रकार फ़ंक्शन-लेवेल दृष्टिकोण प्रोग्रामों के स्थान पर प्रोग्राम-निर्माण संचालन के बीजगणितीय गुणों पर जोर देकर प्रोग्रामों के सेट को गणितीय अवयवों के रूप में प्रोग्राम बनाने की संभावना प्रदान करता है।
फ़ंक्शन-लेवेल दृश्य का अन्य संभावित लाभ केवल कठोरता से फ़ंक्शंस का उपयोग करने की क्षमता है और इस प्रकार नीचे से ऊपर शब्दार्थ होता है, जो सभी प्रकार का सबसे सरल प्रकार है। फिर भी और फ़ंक्शन-लेवेल लैंग्वेज का अस्तित्व है, जो इस प्रकार किसी भी मौजूदा मूल्य-स्तर की उठाई गई (अर्थात्, निचले मूल्य-स्तर से उच्च फ़ंक्शन-स्तर तक उठाई गई) इमेज नहीं हैं: ये (अधिकांशतः संक्षिप्त) फ़ंक्शन-लेवेल परिलैंग्वेजएं प्रोग्रामिंग की अधिक शक्तिशाली शैली का प्रतिनिधित्व करती हैं जो मूल्य-स्तर पर उपलब्ध नहीं है।
फंक्शनल प्रोग्रामिंग के विपरीत
जब बैकस ने प्रोग्रामिंग की अपनी फ़ंक्शन-लेवेल शैली का अध्ययन और प्रचार किया, तो उनके संदेश को ज्यादातर गलत समझा गया[2] अपनी स्वयं की एफपी (प्रोग्रामिंग लैंग्वेज) और इस प्रकार एफएल प्रोग्रामिंग लैंग्वेज के अतिरिक्त पारंपरिक फंक्शनल प्रोग्रामिंग शैली लैंग्वेज का समर्थन करने के रूप में उपयोग किया जाता हैं।
बैकस फंक्शनल प्रोग्रामिंग को एप्लिसेटिव प्रोग्रामिंग कहता है; उनकी फ़ंक्शन-लेवेल प्रोग्रामिंग विशेष, प्रतिबंधित प्रकार है।
फंक्शनल लैंग्वेज से मुख्य अंतर यह है कि बैकस की लैंग्वेज में प्रकारों का निम्नलिखित पदानुक्रम है:
- परमाणु
- कार्य, जो परमाणुओं को परमाणुओं तक ले जाते हैं
- उच्च-क्रम फ़ंक्शंस जिन्हें मुख्य रूप से फंक्शन कहा जाता हैं, जो फ़ंक्शंस में या दो फ़ंक्शंस लेते हैं,
और नए फ़ंक्शन उत्पन्न करने का एकमात्र तरीका फंक्शनल रूपों में से का उपयोग करना है, जो निश्चित हैं: आप अपना स्वयं का फंक्शनल फॉर्म नहीं बना सकते हैं, इस कारण कम से कम एफपी के भीतर नहीं बल्कि एफएफपी (औपचारिक एफपी) के भीतर कर सकते हैं।
इस प्रतिबंध का मतलब है कि एफपी में फ़ंक्शन फंक्शनल रूपों के बीजगणित पर मॉड्यूल (गणित) अंतर्निहित कार्यों द्वारा उत्पन्न हैं, और इस प्रकार बीजगणितीय रूप से ट्रैक करने योग्य हैं। उदाहरण के लिए, दो कार्यों की समानता का सामान्य प्रश्न रुकने की समस्या के बराबर है, और अनिर्णीत है, अपितु एफपी में दो कार्यों की समानता केवल बीजगणित में समानता है, और इस प्रकार बैकस कल्पना करता है और यह साधारण प्रक्रिया है।
आज भी, लैम्ब्डा कैलकुलस लैंग्वेज के कई उपयोगकर्ता अधिकांशतः लैम्ब्डा शैली के प्रतिबंधात्मक संस्करण के रूप में बैकस के फ़ंक्शन-लेवेल दृष्टिकोण की गलत व्याख्या करते हैं, जो वास्तविक वैल्यू-लेवेल शैली है। वास्तव में, बैकस 'प्रतिबंधात्मक' आरोप से असहमत नहीं होंगे: उन्होंने तर्क दिया कि यह ऐसे प्रतिबंधों के कारण ही था कि अच्छी तरह से गठित गणितीय स्थान उत्पन्न हो सकता है, जिस तरह से संरचित प्रोग्रामिंग प्रोग्रामिंग को सादे, अप्रतिबंधित असंरचित प्रोग्रामिंग में उपलब्ध सभी नियंत्रण-प्रवाह संभावनाओं के प्रतिबंधित संस्करण तक सीमित करती है।
एफपी की मूल्य-मुक्त शैली कार्टेशियन-बंद श्रेणी के समीकरण तर्क से निकटता से संबंधित है।
उदाहरण लैंग्वेज
कैनोनिकल फ़ंक्शन-लेवेल प्रोग्रामिंग लैंग्वेज एफपी (प्रोग्रामिंग लैंग्वेज) है। अन्य में एफएल प्रोग्रामिंग लैंग्वेज, और जे प्रोग्रामिंग लैंग्वेज सम्मिलित हैं।
यह भी देखें
- कॉनटेनेटिव प्रोग्रामिंग लैंग्वेज
- फंक्शनल प्रोग्रामिंग, घोषणात्मक प्रोग्रामिंग (तुलना करें)
- मौन प्रोग्रामिंग
- वैल्यू-लेवेल प्रोग्रामिंग, अनिवार्य प्रोग्रामिंग (कंट्रास्ट)
संदर्भ
- ↑ 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.
- ↑ Hudak, Paul (1989). "कार्यात्मक प्रोग्रामिंग भाषाओं की संकल्पना, विकास और अनुप्रयोग". ACM Computing Surveys. 21 (3): 359–411. doi:10.1145/72551.72554. S2CID 207637854.
बाहरी संबंध
- Function Level Programs As Mathematical Objects from John Backus
- From Function Level Semantics to Program Transformation and Optimization SpringerLink see point 1.2 and 1.3
- Closed applicative languages, FP and FL, in John W. Backus (Publications) or the original Programming Language Semantics and Closed Applicative Languages
- Instance variables, a way out of the variable abstinence