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

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

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

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

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

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

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

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

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

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

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

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

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

एफपी की मूल्य-मुक्त शैली कार्टेशियन-बंद श्रेणी के समीकरण तर्क से निकटता से संबंधित है।

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

यह भी देखें

 * कॉनटेनेटिव प्रोग्रामिंग भाषा
 * कार्यात्मक प्रोग्रामिंग, घोषणात्मक प्रोग्रामिंग (तुलना करें)
 * मौन प्रोग्रामिंग
 * मूल्य-स्तरीय प्रोग्रामिंग, अनिवार्य प्रोग्रामिंग (कंट्रास्ट)

बाहरी संबंध

 * 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