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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

 * कॉनटेनेटिव प्रोग्रामिंग लैंग्वेज
 * फंक्शनल प्रोग्रामिंग, डिक्लेरेटिव प्रोग्रामिंग (तुलना करें)
 * साइलेंट प्रोग्रामिंग
 * वैल्यू-लेवेल प्रोग्रामिंग, इम्प्रेटिव प्रोग्रामिंग (कंट्रास्ट)

बाहरी संबंध

 * 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