डिक्लेरेटिव प्रोग्रामिंग (घोषणात्मक प्रोग्रामिंग): Difference between revisions

From Vigyanwiki
No edit summary
Line 6: Line 6:
घोषणात्मक कार्यरचना अक्सर [[कार्यक्रम (मशीन)]] को औपचारिक तर्क के सिद्धांतों के रूप में मानती है, और और संगणना को उस तर्क स्थान में निगमन के रूप में मानती है। घोषणात्मक कार्यरचना [[समानांतर कंप्यूटिंग|समानांतर कार्यक्रमों]] को लिखने को बहुत आसान बना सकती है।<ref>{{cite web|url=http://www.cse.unsw.edu.au/~pls/damp09/ |title=DAMP 2009: Workshop on Declarative Aspects of Multicore Programming |publisher=Cse.unsw.edu.au |date=20 January 2009 |access-date=15 August 2013}}</ref>
घोषणात्मक कार्यरचना अक्सर [[कार्यक्रम (मशीन)]] को औपचारिक तर्क के सिद्धांतों के रूप में मानती है, और और संगणना को उस तर्क स्थान में निगमन के रूप में मानती है। घोषणात्मक कार्यरचना [[समानांतर कंप्यूटिंग|समानांतर कार्यक्रमों]] को लिखने को बहुत आसान बना सकती है।<ref>{{cite web|url=http://www.cse.unsw.edu.au/~pls/damp09/ |title=DAMP 2009: Workshop on Declarative Aspects of Multicore Programming |publisher=Cse.unsw.edu.au |date=20 January 2009 |access-date=15 August 2013}}</ref>


सामान्य घोषणात्मक भाषाओं में डाटाबेस [[क्वेरी भाषाएँ]] (जैसे, [[SQL]], [[XQuery]]), [[नियमित अभिव्यक्ति]]याँ, [[तर्क प्रोग्रामिंग|तर्क कार्यरचना]], [[कार्यात्मक प्रोग्रामिंग|कार्यात्मक कार्यरचना]] और [[कॉन्फ़िगरेशन प्रबंधन डेटाबेस|समाकृतिक प्रबंधन डेटाबेस]] सिस्टम शामिल हैं।
सामान्य घोषणात्मक भाषाओं में डाटाबेस [[क्वेरी भाषाएँ]] (जैसे, [[SQL]], [[XQuery]]), [[नियमित अभिव्यक्ति]]याँ, [[तर्क प्रोग्रामिंग|तर्क कार्यरचना]], [[कार्यात्मक प्रोग्रामिंग|कार्यात्मक कार्यरचना]] और [[कॉन्फ़िगरेशन प्रबंधन डेटाबेस|समाकृतिक प्रबंधन डेटाबेस]] प्रणाली शामिल हैं।


== परिभाषा ==
== परिभाषा ==
Line 18: Line 18:
घोषणात्मक कार्यरचना कार्यरचना की एक गैर-अनिवार्य शैली है जिसमें कार्यक्रम स्पष्ट रूप से सूचीबद्ध आदेशों या चरणों को सूचीबद्ध किए बिना अपने वांछित परिणामों का वर्णन करते हैं जिन्हें निष्पादित किया जाना चाहिए। कार्यात्मक कार्यरचना और [[तार्किक प्रोग्रामिंग|तार्किक कार्यरचना]] भाषाओं की विशेषता घोषणात्मक कार्यरचना शैली है। तार्किक कार्यरचना में, कार्यक्रम में तार्किक प्रकथन होते हैं, और कार्यक्रम प्रकथन के प्रमाण की खोज करके निष्पादित होता है।
घोषणात्मक कार्यरचना कार्यरचना की एक गैर-अनिवार्य शैली है जिसमें कार्यक्रम स्पष्ट रूप से सूचीबद्ध आदेशों या चरणों को सूचीबद्ध किए बिना अपने वांछित परिणामों का वर्णन करते हैं जिन्हें निष्पादित किया जाना चाहिए। कार्यात्मक कार्यरचना और [[तार्किक प्रोग्रामिंग|तार्किक कार्यरचना]] भाषाओं की विशेषता घोषणात्मक कार्यरचना शैली है। तार्किक कार्यरचना में, कार्यक्रम में तार्किक प्रकथन होते हैं, और कार्यक्रम प्रकथन के प्रमाण की खोज करके निष्पादित होता है।


[[शुद्ध कार्यात्मक भाषा]] में, जैसे कि [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल (कार्यरचना भाषा)]], सभी कार्य बिना दुष्प्रभाव के होते हैं, और राज्य परिवर्तन केवल ऐसे कार्यों के रूप में प्रस्तुत किए जाते हैं जो स्थिति परिवर्तन केवल उन कार्यों के रूप में दर्शाए जाते हैं जो स्थिति को बदलते हैं, जो स्पष्ट रूप से कार्यक्रम में प्रथम श्रेणी की वस्तु के रूप में दर्शाए जाते हैं। हालांकि शुद्ध कार्यात्मक भाषाएं गैर-अनिवार्य हैं, वे अक्सर किसी फलन के प्रभाव को चरणों की श्रृंखला के रूप में वर्णित करने के लिए सुविधा प्रदान करती हैं। अन्य कार्यात्मक भाषाएँ, जैसे [[लिस्प (प्रोग्रामिंग भाषा)|लिस्प (कार्यरचना भाषा)]], [[OCaml]] (ओकैमल) और [[Erlang (प्रोग्रामिंग भाषा)|Erlang (एरलांग)]], प्रक्रियात्मक और कार्यात्मक कार्यरचना के मिश्रण का समर्थन करती हैं।
[[शुद्ध कार्यात्मक भाषा]] में, जैसे कि [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल (कार्यरचना भाषा)]], सभी कार्य बिना दुष्प्रभाव के होते हैं, और स्थितिपरिवर्तन केवल ऐसे कार्यों के रूप में प्रस्तुत किए जाते हैं जो स्थिति परिवर्तन केवल उन कार्यों के रूप में दर्शाए जाते हैं जो स्थिति को बदलते हैं, जो स्पष्ट रूप से कार्यक्रम में प्रथम श्रेणी की वस्तु के रूप में दर्शाए जाते हैं। हालांकि शुद्ध कार्यात्मक भाषाएं गैर-अनिवार्य हैं, वे अक्सर किसी फलन के प्रभाव को चरणों की श्रृंखला के रूप में वर्णित करने के लिए सुविधा प्रदान करती हैं। अन्य कार्यात्मक भाषाएँ, जैसे [[लिस्प (प्रोग्रामिंग भाषा)|लिस्प (कार्यरचना भाषा)]], [[OCaml]] (ओकैमल) और [[Erlang (प्रोग्रामिंग भाषा)|Erlang (एरलांग)]], प्रक्रियात्मक और कार्यात्मक कार्यरचना के मिश्रण का समर्थन करती हैं।


कुछ तार्किक कार्यरचना भाषाएं, जैसे कि [[प्रोलॉग]], और डेटाबेस क्वेरी भाषाएं, जैसे कि SQL, सिद्धांत रूप में घोषणात्मक होते हुए भी कार्यरचना की प्रक्रियात्मक शैली का समर्थन करती हैं।
कुछ तार्किक कार्यरचना भाषाएं, जैसे कि [[प्रोलॉग]], और डेटाबेस क्वेरी भाषाएं, जैसे कि SQL, सिद्धांत रूप में घोषणात्मक होते हुए भी कार्यरचना की प्रक्रियात्मक शैली का समर्थन करती हैं।
Line 29: Line 29:


===[[डोमेन-विशिष्ट भाषा]]एं===
===[[डोमेन-विशिष्ट भाषा]]एं===
घोषणात्मक डोमेन-विशिष्ट भाषाओं (DSL) के प्रसिद्ध उदाहरणों में [[yacc]] पार्सर जनित्र निवेश भाषा, [[QML]], मेक (सॉफ़्टवेयर) बिल्ड विनिर्देशन भाषा, पपेट (सॉफ़्टवेयर) की समाकृतिक प्रबंधन भाषा, नियमित अभिव्यक्तियाँ और SQL का उप-समूचय शामिल हैं (उदाहरण के लिए, चयन क्वेरी)। DSLs के पास उपयोगी होने का लाभ है जबकि [[ट्यूरिंग-पूर्ण]] होने की आवश्यकता नहीं है, जिससे किसी भाषा के लिए विशुद्ध रूप से घोषणात्मक होना आसान हो जाता है।
घोषणात्मक डोमेन-विशिष्ट भाषाओं (DSL) के प्रसिद्ध उदाहरणों में [[yacc]] पार्सर जनित्र निवेश भाषा, [[QML]], मेक (सॉफ़्टवेयर) बिल्ड विनिर्देशन भाषा, पपेट (सॉफ़्टवेयर) की समाकृतिक प्रबंधन भाषा, नियमित अभिव्यक्तियाँ और SQL का उप-समुच्चय शामिल हैं (उदाहरण के लिए, चयन क्वेरी)। DSLs के पास उपयोगी होने का लाभ है जबकि [[ट्यूरिंग-पूर्ण]] होने की आवश्यकता नहीं है, जिससे किसी भाषा के लिए विशुद्ध रूप से घोषणात्मक होना आसान हो जाता है।


कई मार्कअप भाषाएँ जैसे [[HTML]], [[MXML]], [[XAML]], [[XSLT]] या अन्य [[उपयोगकर्ता-इंटरफ़ेस मार्कअप भाषा]]एँ अक्सर घोषणात्मक होती हैं। उदाहरण के लिए, HTML केवल यह बताता है कि वेबपेज पर क्या दिखाई देना चाहिए - यह न तो किसी पेज को प्रस्तुत करने के लिए नियंत्रण प्रवाह और न ही पेज के संभावित [[ह्यूमन कंप्यूटर इंटरेक्शन]] को निर्दिष्ट करता है।
कई मार्कअप भाषाएँ जैसे [[HTML]], [[MXML]], [[XAML]], [[XSLT]] या अन्य [[उपयोगकर्ता-इंटरफ़ेस मार्कअप भाषा|उपयोगकर्ता-अंतरापृष्ठ मार्कअप भाषाएँ]] अक्सर घोषणात्मक होती हैं। उदाहरण के लिए, HTML केवल यह बताता है कि वेबपेज पर क्या दिखाई देना चाहिए - यह न तो किसी पेज को प्रस्तुत करने के लिए नियंत्रण प्रवाह और न ही किसी उपयोगकर्ता के साथ पेज के संभावित [[ह्यूमन कंप्यूटर इंटरेक्शन|पारस्परिक व्यवहार]] को निर्दिष्ट करता है।


{{As of | 2013}}, कुछ सॉफ्टवेयर सिस्टम पारंपरिक उपयोगकर्ता-इंटरफ़ेस मार्कअप भाषाओं (जैसे HTML) को घोषणात्मक मार्कअप के साथ संयोजित करें जो परिभाषित करता है कि बैक-एंड सर्वर सिस्टम को घोषित इंटरफ़ेस का समर्थन करने के लिए क्या करना चाहिए (लेकिन कैसे नहीं)। ऐसी प्रणालियाँ, आमतौर पर एक डोमेन-विशिष्ट XML नाम स्थान का उपयोग करते हुए, SQL डेटाबेस सिंटैक्स के सार या प्रतिनिधित्वात्मक राज्य हस्तांतरण (REST) ​​और [[SOAP]] का उपयोग करके वेब सेवाओं के लिए पैरामीटरयुक्त कॉल शामिल कर सकती हैं।
2013 तक, कुछ सॉफ्टवेयर प्रणाली पारंपरिक उपयोगकर्ता-अंतरापृष्ठ मार्कअप भाषाओं (जैसे HTML) को घोषणात्मक मार्कअप के साथ संयोजित करता है जो परिभाषित करता है कि पश्च-भाग परिसेवक प्रणाली को घोषित अंतरापृष्ठ का समर्थन करने के लिए क्या करना चाहिए (लेकिन कैसे नहीं)। ऐसी प्रणालियाँ, आमतौर पर डोमेन-विशिष्ट XML नामस्थान का उपयोग करते हुए, प्रतिनिधित्वात्मक स्थिति स्थानान्तरण (REST) ​​और [[SOAP]] का उपयोग करके वेब सेवाओं के लिए SQL डेटाबेस सिंटैक्स या पैरामिट्रीकृत कॉल के अमूर्त शामिल कर सकती हैं।






=== कार्यात्मक कार्यरचना ===
=== कार्यात्मक कार्यरचना ===
हास्केल (कार्यरचना लैंग्वेज), स्कीम (कार्यरचना लैंग्वेज), और [[मानक एमएल]] जैसी फंक्शनल कार्यरचना लैंग्वेज फंक्शन एप्लिकेशन के जरिए एक्सप्रेशन का मूल्यांकन करती हैं। [[प्रक्रियात्मक प्रोग्रामिंग|प्रक्रियात्मक कार्यरचना]] के संबंधित लेकिन अधिक अनिवार्य कार्यरचना प्रतिमान के विपरीत, कार्यात्मक कार्यरचना स्पष्ट अनुक्रमण पर बहुत कम जोर देती है। उदाहरण के लिए, स्कीम (कार्यरचना लैंग्वेज) में, कई प्रकार के उप-अभिव्यक्तियों के मूल्यांकन का क्रम अपरिभाषित या निहित है।<ref>{{cite web|url=https://small.r7rs.org/attachment/r7rs.pdf |title=Revised<sup>7</sup> Report on the Algorithmic Language Scheme |publisher=Scheme Working Group 1 |access-date=2020-12-05}}</ref> इसके बजाय, संगणनाओं को विभिन्न प्रकार के पुनरावर्ती उच्च-क्रम फ़ंक्शन एप्लिकेशन और फ़ंक्शन संरचना (कंप्यूटर विज्ञान) द्वारा चित्रित किया जाता है, और इस तरह इसे केवल Domain_of_a_functions और [[कोडोमेन]] के बीच मैपिंग के एक सेट के रूप में माना जा सकता है। एमएल और लिस्प परिवारों में अधिकांश सहित कई कार्यात्मक भाषाएं, [[विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग|विशुद्ध रूप से कार्यात्मक कार्यरचना]] नहीं हैं, और इस प्रकार कार्यक्रमों में साइड इफेक्ट (कंप्यूटर विज्ञान) की शुरुआत की अनुमति देती हैं, हालांकि जब संभव हो तो आमतौर पर इससे बचा जाता है।
हास्केल (कार्यरचना लैंग्वेज), स्कीम (कार्यरचना लैंग्वेज), और [[मानक एमएल|ML]] जैसी कार्यात्मक कार्यरचना भाषाएं फलन अनुप्रयोग के जरिए अभिव्यक्तियों का मूल्यांकन करती हैं। [[प्रक्रियात्मक प्रोग्रामिंग|प्रक्रियात्मक कार्यरचना]] के संबंधित लेकिन अधिक अनिवार्य कार्यरचना प्रतिमान के विपरीत, कार्यात्मक कार्यरचना स्पष्ट अनुक्रमण पर बहुत कम जोर देती है। उदाहरण के लिए, स्कीम (कार्यरचना लैंग्वेज) में, कई प्रकार के उप-अभिव्यक्तियों के मूल्यांकन का क्रम अपरिभाषित या निहित है।<ref>{{cite web|url=https://small.r7rs.org/attachment/r7rs.pdf |title=Revised<sup>7</sup> Report on the Algorithmic Language Scheme |publisher=Scheme Working Group 1 |access-date=2020-12-05}}</ref> इसके बजाय, संगणनाओं को विभिन्न प्रकार के पुनरावर्ती उच्च-क्रम फलन अनुप्रयोग और फलन संरचना (कंप्यूटर विज्ञान) द्वारा चित्रित किया जाता है, और इस तरह इसे केवल डोमेन और [[कोडोमेन]] के बीच मैपिंग के समुच्चय के रूप में माना जा सकता है। कई कार्यात्मक भाषाएं, जिनमें ML और लिस्प परिवारों में से अधिकांश कार्यात्मक भाषाएं शामिल हैं, [[विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग|विशुद्ध रूप से कार्यात्मक कार्यरचना]] नहीं हैं, और इस प्रकार कार्यक्रमों में राज्यव्यापी प्रभावों (कंप्यूटर विज्ञान) की शुरुआत की अनुमति देती हैं, हालांकि जब संभव हो तो आमतौर पर इससे बचा जाता है।


=== संकर भाषाएं ===
=== संकर भाषाएं ===
Makefiles, उदाहरण के लिए, एक घोषणात्मक फैशन में निर्भरता निर्दिष्ट करें,<ref>[http://phoenix.labri.fr/wiki/doku.php?id=an_overview_on_dsls ] {{webarchive |url=https://web.archive.org/web/20071023021126/http://phoenix.labri.fr/wiki/doku.php?id=an_overview_on_dsls |date=October 23, 2007 }}</ref> लेकिन कार्रवाई करने के लिए अनिवार्य सूची भी शामिल करें। इसी तरह, yacc घोषणात्मक रूप से एक संदर्भ मुक्त व्याकरण निर्दिष्ट करता है, लेकिन इसमें एक मेजबान भाषा से कोड स्निपेट शामिल होता है, जो आमतौर पर अनिवार्य होता है (जैसे [[सी (प्रोग्रामिंग भाषा)|सी (कार्यरचना भाषा)]])।
मकेफाइल, उदाहरण के लिए, घोषणात्मक फैशन में निर्भरता निर्दिष्ट करते हैं,<ref>[http://phoenix.labri.fr/wiki/doku.php?id=an_overview_on_dsls ] {{webarchive |url=https://web.archive.org/web/20071023021126/http://phoenix.labri.fr/wiki/doku.php?id=an_overview_on_dsls |date=October 23, 2007 }}</ref> लेकिन साथ ही कार्रवाई करने के लिए अनिवार्य सूची भी शामिल करें। इसी तरह, yacc घोषणात्मक रूप से संदर्भ मुक्त व्याकरण निर्दिष्ट करता है, लेकिन इसमें मेजबान भाषा से कोड लघुचाहा शामिल होता है, जो आमतौर पर अनिवार्य होता है (जैसे [[सी (प्रोग्रामिंग भाषा)|C (कार्यरचना भाषा)]])।


=== तर्क कार्यरचना ===
=== तर्क कार्यरचना ===
लॉजिक कार्यरचना लैंग्वेज जैसे प्रोलॉग स्टेट और क्वेरी रिलेशंस। इन प्रश्नों का उत्तर कैसे दिया जाता है, इसकी बारीकियों के कार्यान्वयन और इसके प्रमेय पर निर्भर है, लेकिन आम तौर पर किसी प्रकार के एकीकरण (कंप्यूटिंग) का रूप लेते हैं। कार्यात्मक कार्यरचना की तरह, कई तर्क कार्यरचना भाषाएं साइड इफेक्ट्स की अनुमति देती हैं, और परिणामस्वरूप कड़ाई से घोषणात्मक नहीं होती हैं।
लॉजिक कार्यरचना भाषाएँ जैसे प्रोलॉग स्टेट और क्वेरी रिलेशंस। इन प्रश्नों का उत्तर कैसे दिया जाता है, इसका विवरण कार्यान्वयन और इसके प्रमेय समर्थक पर निर्भर करता है, लेकिन आम तौर पर किसी प्रकार के एकीकरण का रूप ले लेता है। कार्यात्मक कार्यरचना की तरह, कई तर्क कार्यरचना भाषाएं दुष्प्रभाव की अनुमति देती हैं, और परिणामस्वरूप सख़्ती से घोषणात्मक नहीं होती हैं।


=== मॉडलिंग ===
=== प्रतिरूपण ===
भौतिक प्रणालियों के मॉडल, या गणितीय अभ्यावेदन, कंप्यूटर कोड में लागू किए जा सकते हैं जो घोषणात्मक है। कोड में कई समीकरण हैं, अनिवार्य कार्य नहीं हैं, जो व्यवहार संबंधों का वर्णन (घोषणा) करते हैं। जब इस औपचारिकता में एक मॉडल व्यक्त किया जाता है, तो एक कंप्यूटर समाधान एल्गोरिथ्म को सर्वोत्तम रूप से तैयार करने के लिए बीजगणितीय जोड़तोड़ करने में सक्षम होता है। गणितीय कार्य-कारण आमतौर पर भौतिक प्रणाली की सीमाओं पर लगाया जाता है, जबकि प्रणाली का व्यवहारिक विवरण स्वयं घोषणात्मक या आकस्मिक होता है। घोषणात्मक [[मॉडलिंग भाषा]]ओं और वातावरण में [[एनालिटिका (सॉफ्टवेयर)]], [[नमूना]] और सिमिल (कंप्यूटिंग) शामिल हैं।<ref>{{cite web|url=http://www.simulistics.com/tour/declarative.htm |title=Declarative modelling |publisher=Simulistics |access-date=15 August 2013}}</ref>
भौतिक प्रणालियों के प्रतिमा, या गणितीय अभ्यावेदन, कंप्यूटर कोड में लागू किए जा सकते हैं जो घोषणात्मक है। कोड में कई समीकरण हैं, अनिवार्य कार्य नहीं हैं, जो व्यवहार संबंधों का वर्णन (घोषणा) करते हैं। जब इस औपचारिकता में प्रतिमा व्यक्त की जाता है, तो कंप्यूटर समाधान कलन विधि को सर्वोत्तम रूप से तैयार करने के लिए बीजगणितीय जोड़तोड़ करने में सक्षम होता है। गणितीय कार्य-कारण आमतौर पर भौतिक प्रणाली की सीमाओं पर लगाया जाता है, जबकि प्रणाली का व्यवहारिक विवरण स्वयं घोषणात्मक या आकस्मिक होता है। घोषणात्मक [[मॉडलिंग भाषा|प्रतिरूपण भाषा]]ओं और वातावरण में [[एनालिटिका (सॉफ्टवेयर)]], [[नमूना|मॉडलिका]] और सिमाइल (कंप्यूटिंग) शामिल हैं।<ref>{{cite web|url=http://www.simulistics.com/tour/declarative.htm |title=Declarative modelling |publisher=Simulistics |access-date=15 August 2013}}</ref>





Revision as of 07:06, 22 February 2023

कंप्यूटर विज्ञान में, घोषणात्मक कार्यरचना कार्यरचना प्रतिमान है - संरचना और कंप्यूटर कार्यक्रम (प्रोग्राम) के तत्वों के निर्माण की एक शैली - जो इसके नियंत्रण प्रवाह का वर्णन किए बिना गणना के तर्क को व्यक्त करती है।[1]

कई भाषाएं जो इस शैली को लागू करती हैं, यह वर्णन कि कार्यक्रम को समस्यात्मक प्रांत के संदर्भ में क्या हासिल करना चाहिए करके दुष्प्रभाव को कम करने या समाप्त करने का प्रयास करती हैं, बजाय यह वर्णन करने के कि इसे क्रमादेशन भाषा आद्य के अनुक्रम के रूप में कैसे पूरा किया जाए।[2] (भाषा के कार्यान्वयन के लिए कैसे छोड़ा जा रहा है)। यह अनिवार्य कार्यरचना के विपरीत है, जो कलन विधि को स्पष्ट चरणों में लागू करता है।[3]

घोषणात्मक कार्यरचना अक्सर कार्यक्रम (मशीन) को औपचारिक तर्क के सिद्धांतों के रूप में मानती है, और और संगणना को उस तर्क स्थान में निगमन के रूप में मानती है। घोषणात्मक कार्यरचना समानांतर कार्यक्रमों को लिखने को बहुत आसान बना सकती है।[4]

सामान्य घोषणात्मक भाषाओं में डाटाबेस क्वेरी भाषाएँ (जैसे, SQL, XQuery), नियमित अभिव्यक्तियाँ, तर्क कार्यरचना, कार्यात्मक कार्यरचना और समाकृतिक प्रबंधन डेटाबेस प्रणाली शामिल हैं।

परिभाषा

घोषणात्मक कार्यरचना को अक्सर कार्यरचना की किसी भी शैली के रूप में परिभाषित किया जाता है जो अनिवार्य कार्यरचना नहीं है। कई अन्य सामान्य परिभाषाएँ इसे अनिवार्य कार्यरचना के साथ तुलना करके इसे परिभाषित करने का प्रयास करती हैं। उदाहरण के लिए:

  • एक उच्च-स्तरीय कार्यक्रम जो वर्णन करता है कि संगणना को क्या करना चाहिए।
  • कोई भी कार्यरचना भाषा जिसमें दुष्प्रभाव का अभाव है (या अधिक विशेष रूप से, संदर्भित पारदर्शिता है)
  • गणितीय तर्क के स्पष्ट अनुरूपता वाली भाषा।[5]

ये परिभाषाएँ काफी हद तक अतिव्यापन करती हैं।

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

शुद्ध कार्यात्मक भाषा में, जैसे कि हास्केल (कार्यरचना भाषा), सभी कार्य बिना दुष्प्रभाव के होते हैं, और स्थितिपरिवर्तन केवल ऐसे कार्यों के रूप में प्रस्तुत किए जाते हैं जो स्थिति परिवर्तन केवल उन कार्यों के रूप में दर्शाए जाते हैं जो स्थिति को बदलते हैं, जो स्पष्ट रूप से कार्यक्रम में प्रथम श्रेणी की वस्तु के रूप में दर्शाए जाते हैं। हालांकि शुद्ध कार्यात्मक भाषाएं गैर-अनिवार्य हैं, वे अक्सर किसी फलन के प्रभाव को चरणों की श्रृंखला के रूप में वर्णित करने के लिए सुविधा प्रदान करती हैं। अन्य कार्यात्मक भाषाएँ, जैसे लिस्प (कार्यरचना भाषा), OCaml (ओकैमल) और Erlang (एरलांग), प्रक्रियात्मक और कार्यात्मक कार्यरचना के मिश्रण का समर्थन करती हैं।

कुछ तार्किक कार्यरचना भाषाएं, जैसे कि प्रोलॉग, और डेटाबेस क्वेरी भाषाएं, जैसे कि SQL, सिद्धांत रूप में घोषणात्मक होते हुए भी कार्यरचना की प्रक्रियात्मक शैली का समर्थन करती हैं।

उप-प्रतिमान

घोषणात्मक कार्यरचना व्यापक शब्द है जिसमें कई बेहतर ज्ञात कार्यरचना प्रतिमान शामिल हैं।

बाधा कार्यरचना

बाधा कार्यरचना बाधाओं के रूप में चर के बीच संबंध बताती है जो लक्ष्य समाधान के गुणों को निर्दिष्ट करती है। बाधाओं के समुच्चय को प्रत्येक चर के लिए मान देकर हल किया जाता है ताकि समाधान बाधाओं की अधिकतम संख्या के अनुरूप हो। बाधा कार्यरचना अक्सर अन्य प्रतिमानों का पूरक होता है: कार्यात्मक, तार्किक या यहां तक ​​कि अनिवार्य कार्यरचना।

डोमेन-विशिष्ट भाषाएं

घोषणात्मक डोमेन-विशिष्ट भाषाओं (DSL) के प्रसिद्ध उदाहरणों में yacc पार्सर जनित्र निवेश भाषा, QML, मेक (सॉफ़्टवेयर) बिल्ड विनिर्देशन भाषा, पपेट (सॉफ़्टवेयर) की समाकृतिक प्रबंधन भाषा, नियमित अभिव्यक्तियाँ और SQL का उप-समुच्चय शामिल हैं (उदाहरण के लिए, चयन क्वेरी)। DSLs के पास उपयोगी होने का लाभ है जबकि ट्यूरिंग-पूर्ण होने की आवश्यकता नहीं है, जिससे किसी भाषा के लिए विशुद्ध रूप से घोषणात्मक होना आसान हो जाता है।

कई मार्कअप भाषाएँ जैसे HTML, MXML, XAML, XSLT या अन्य उपयोगकर्ता-अंतरापृष्ठ मार्कअप भाषाएँ अक्सर घोषणात्मक होती हैं। उदाहरण के लिए, HTML केवल यह बताता है कि वेबपेज पर क्या दिखाई देना चाहिए - यह न तो किसी पेज को प्रस्तुत करने के लिए नियंत्रण प्रवाह और न ही किसी उपयोगकर्ता के साथ पेज के संभावित पारस्परिक व्यवहार को निर्दिष्ट करता है।

2013 तक, कुछ सॉफ्टवेयर प्रणाली पारंपरिक उपयोगकर्ता-अंतरापृष्ठ मार्कअप भाषाओं (जैसे HTML) को घोषणात्मक मार्कअप के साथ संयोजित करता है जो परिभाषित करता है कि पश्च-भाग परिसेवक प्रणाली को घोषित अंतरापृष्ठ का समर्थन करने के लिए क्या करना चाहिए (लेकिन कैसे नहीं)। ऐसी प्रणालियाँ, आमतौर पर डोमेन-विशिष्ट XML नामस्थान का उपयोग करते हुए, प्रतिनिधित्वात्मक स्थिति स्थानान्तरण (REST) ​​और SOAP का उपयोग करके वेब सेवाओं के लिए SQL डेटाबेस सिंटैक्स या पैरामिट्रीकृत कॉल के अमूर्त शामिल कर सकती हैं।


कार्यात्मक कार्यरचना

हास्केल (कार्यरचना लैंग्वेज), स्कीम (कार्यरचना लैंग्वेज), और ML जैसी कार्यात्मक कार्यरचना भाषाएं फलन अनुप्रयोग के जरिए अभिव्यक्तियों का मूल्यांकन करती हैं। प्रक्रियात्मक कार्यरचना के संबंधित लेकिन अधिक अनिवार्य कार्यरचना प्रतिमान के विपरीत, कार्यात्मक कार्यरचना स्पष्ट अनुक्रमण पर बहुत कम जोर देती है। उदाहरण के लिए, स्कीम (कार्यरचना लैंग्वेज) में, कई प्रकार के उप-अभिव्यक्तियों के मूल्यांकन का क्रम अपरिभाषित या निहित है।[6] इसके बजाय, संगणनाओं को विभिन्न प्रकार के पुनरावर्ती उच्च-क्रम फलन अनुप्रयोग और फलन संरचना (कंप्यूटर विज्ञान) द्वारा चित्रित किया जाता है, और इस तरह इसे केवल डोमेन और कोडोमेन के बीच मैपिंग के समुच्चय के रूप में माना जा सकता है। कई कार्यात्मक भाषाएं, जिनमें ML और लिस्प परिवारों में से अधिकांश कार्यात्मक भाषाएं शामिल हैं, विशुद्ध रूप से कार्यात्मक कार्यरचना नहीं हैं, और इस प्रकार कार्यक्रमों में राज्यव्यापी प्रभावों (कंप्यूटर विज्ञान) की शुरुआत की अनुमति देती हैं, हालांकि जब संभव हो तो आमतौर पर इससे बचा जाता है।

संकर भाषाएं

मकेफाइल, उदाहरण के लिए, घोषणात्मक फैशन में निर्भरता निर्दिष्ट करते हैं,[7] लेकिन साथ ही कार्रवाई करने के लिए अनिवार्य सूची भी शामिल करें। इसी तरह, yacc घोषणात्मक रूप से संदर्भ मुक्त व्याकरण निर्दिष्ट करता है, लेकिन इसमें मेजबान भाषा से कोड लघुचाहा शामिल होता है, जो आमतौर पर अनिवार्य होता है (जैसे C (कार्यरचना भाषा))।

तर्क कार्यरचना

लॉजिक कार्यरचना भाषाएँ जैसे प्रोलॉग स्टेट और क्वेरी रिलेशंस। इन प्रश्नों का उत्तर कैसे दिया जाता है, इसका विवरण कार्यान्वयन और इसके प्रमेय समर्थक पर निर्भर करता है, लेकिन आम तौर पर किसी प्रकार के एकीकरण का रूप ले लेता है। कार्यात्मक कार्यरचना की तरह, कई तर्क कार्यरचना भाषाएं दुष्प्रभाव की अनुमति देती हैं, और परिणामस्वरूप सख़्ती से घोषणात्मक नहीं होती हैं।

प्रतिरूपण

भौतिक प्रणालियों के प्रतिमा, या गणितीय अभ्यावेदन, कंप्यूटर कोड में लागू किए जा सकते हैं जो घोषणात्मक है। कोड में कई समीकरण हैं, अनिवार्य कार्य नहीं हैं, जो व्यवहार संबंधों का वर्णन (घोषणा) करते हैं। जब इस औपचारिकता में प्रतिमा व्यक्त की जाता है, तो कंप्यूटर समाधान कलन विधि को सर्वोत्तम रूप से तैयार करने के लिए बीजगणितीय जोड़तोड़ करने में सक्षम होता है। गणितीय कार्य-कारण आमतौर पर भौतिक प्रणाली की सीमाओं पर लगाया जाता है, जबकि प्रणाली का व्यवहारिक विवरण स्वयं घोषणात्मक या आकस्मिक होता है। घोषणात्मक प्रतिरूपण भाषाओं और वातावरण में एनालिटिका (सॉफ्टवेयर), मॉडलिका और सिमाइल (कंप्यूटिंग) शामिल हैं।[8]


उदाहरण

लिस्प

लिस्प (कार्यरचना लैंग्वेज) (1958) लिस्ट प्रोसेसर के लिए है।[9] यह प्रक्रिया सूची (सार डेटा प्रकार) के अनुरूप है। सूचियों की सूची बनाकर एक डेटा संरचना बनाई जाती है। स्मृति में, यह एक वृक्ष (डेटा संरचना) बनाता है। आंतरिक रूप से, विशिष्ट लिस्प डेटा की वृक्ष संरचना रिकर्सन (कंप्यूटर विज्ञान) कार्यों के साथ प्रसंस्करण के लिए खुद को अच्छी तरह से उधार देती है।[10] ट्री बनाने का सिंटैक्स व्हॉट्सएप से अलग किए गए तत्व (गणित) को कोष्ठक में बंद करना है। निम्नलिखित तीन तत्वों की एक सूची है। पहले दो तत्व स्वयं दो तत्वों की सूची हैं:

((A B) (HELLO WORLD) 94) लिस्प में तत्वों को निकालने और पुनर्निर्माण करने का कार्य है।Cite error: Closing </ref> missing for <ref> tag आधुनिक लिस्प एकीकृत विकास पर्यावरण कोष्ठक मिलान सुनिश्चित करने में मदद करता है। एक तरफ के रूप में, लिस्प असाइनमेंट स्टेटमेंट और गोटो लूप्स के अनिवार्य भाषा संचालन का समर्थन करता है।Cite error: Closing </ref> missing for <ref> tag मेटा भाषा के लिए खड़ा है। एमएल वैधानिक रूप से टाइप किया गया है, और फ़ंक्शन तर्क और रिटर्न प्रकार एनोटेट किए जा सकते हैं।Cite error: Closing </ref> missing for <ref> tag प्रोलॉग कार्यक्रम के बिल्डिंग ब्लॉक ऑब्जेक्ट (दर्शन) और अन्य वस्तुओं के साथ उनके संबंध हैं। वस्तुओं का निर्माण उनके बारे में सही तथ्य बताते हुए किया जाता है।[11]

सेट (गणित) तथ्यों को सेट में ऑब्जेक्ट निर्दिष्ट करके बनाया जाता है। वाक्य-विन्यास है setName(object).

  • बिल्ली एक जानवर है।
animal(cat).
  • चूहा एक जानवर है।
animal(mouse).
  • टॉम एक बिल्ली है।
cat(tom).
  • जेरी एक चूहा है।
mouse(jerry).

विशेषण तथ्यों का उपयोग करके बनाया जाता है adjective(object).

  • बिल्ली बड़ी है।
big(cat).
  • चूहा छोटा होता है।
small(mouse).

कोष्ठक के अंदर कई मदों का उपयोग करके संबंध बनाए जाते हैं। हमारे उदाहरण में हमारे पास है verb(object,object) और verb(adjective,adjective).

  • चूहा पनीर खाता है।
eat(mouse,cheese).
  • बड़े जानवर छोटे जानवर को खा जाते हैं।
eat(big,small).

सभी तथ्यों और संबंधों को दर्ज करने के बाद, एक प्रश्न पूछा जा सकता है:

क्या टॉम जेरी खाएगा?
?- eat(tom,jerry).

प्रोलॉग का उपयोग लक्ष्य-उन्मुख भाषा बनने के लिए विस्तारित हुआ है।[12] लक्ष्य-उन्मुख अनुप्रयोग में, लक्ष्य को उप-लक्ष्यों की एक सूची प्रदान करके परिभाषित किया जाता है। फिर प्रत्येक उप-लक्ष्य को उसके उप-लक्ष्यों आदि की एक सूची प्रदान करके परिभाषित किया जाता है। यदि उप-लक्ष्यों का एक मार्ग समाधान खोजने में विफल रहता है, तो वह उप-लक्ष्य पीछे हट रहा है और दूसरे पथ का व्यवस्थित रूप से प्रयास किया जाता है।[11] व्यावहारिक अनुप्रयोगों में सबसे छोटी पथ समस्या को हल करना शामिल है[13]और परिवार के पेड़ का उत्पादन।<ref name="cpl_3rd-ch10-247">Wilson, Leslie B. (2001). तुलनात्मक प्रोग्रामिंग भाषाएँ, तीसरा संस्करण. Addison-Wesley. p. 247. ISBN 0-201-71012-9.</रेफरी>

यह भी देखें

संदर्भ

  1. Lloyd, J.W., Practical Advantages of Declarative Programming
  2. "declarative language". FOLDOC. 17 May 2004. Retrieved 26 January 2020.
  3. Sebesta, Robert (2016). Concepts of programming languages. Boston: Pearson. ISBN 978-0-13-394302-3. OCLC 896687896.
  4. "DAMP 2009: Workshop on Declarative Aspects of Multicore Programming". Cse.unsw.edu.au. 20 January 2009. Retrieved 15 August 2013.
  5. Chakravarty, Manuel M. T. (14 February 1997). On the Massively Parallel Execution of Declarative Programs (Doctoral dissertation). Technical University of Berlin. Retrieved 26 February 2015. In this context, the criterion for calling a programming language declarative is the existence of a clear, mathematically established correspondence between the language and mathematical logic such that a declarative semantics for the language can be based on the model or the proof theory (or both) of the logic.
  6. "Revised7 Report on the Algorithmic Language Scheme" (PDF). Scheme Working Group 1. Retrieved 2020-12-05.
  7. [1] Archived October 23, 2007, at the Wayback Machine
  8. "Declarative modelling". Simulistics. Retrieved 15 August 2013.
  9. Jones, Robin; Maynard, Clive; Stewart, Ian (December 6, 2012). The Art of Lisp Programming. Springer Science & Business Media. p. 2. ISBN 9781447117193.
  10. Wilson, Leslie B. (2001). तुलनात्मक प्रोग्रामिंग भाषाएँ, तीसरा संस्करण. Addison-Wesley. p. 220. ISBN 0-201-71012-9.
  11. 11.0 11.1 Wilson, Leslie B. (2001). तुलनात्मक प्रोग्रामिंग भाषाएँ, तीसरा संस्करण. Addison-Wesley. p. 246. ISBN 0-201-71012-9.
  12. Wilson, Leslie B. (2001). तुलनात्मक प्रोग्रामिंग भाषाएँ, तीसरा संस्करण. Addison-Wesley. p. 245. ISBN 0-201-71012-9.
  13. Cite error: Invalid <ref> tag; no text was provided for refs named PrologHistory


बाहरी संबंध