डिक्लेरेटिव प्रोग्रामिंग (घोषणात्मक प्रोग्रामिंग): Difference between revisions
(Created page with "{{Short description|Programming paradigm based on modeling the logic of a computation}} {{multiple issues| {{More footnotes|date=April 2010}} {{Refimprove|date=February 2015}}...") |
No edit summary |
||
(12 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{Short description|Programming paradigm based on modeling the logic of a computation}} | {{Short description|Programming paradigm based on modeling the logic of a computation}} | ||
[[कंप्यूटर विज्ञान]] में, घोषणात्मक कार्यरचना [[प्रोग्रामिंग प्रतिमान|कार्यरचना प्रतिमान]] है - संरचना और कंप्यूटर कार्यक्रम (प्रोग्राम) के तत्वों के निर्माण की एक शैली - जो इसके नियंत्रण प्रवाह का वर्णन किए बिना [[गणना]] के तर्क को व्यक्त करती है।<ref>{{citation|last=Lloyd|first=J.W.|title=Practical Advantages of Declarative Programming}}</ref> | |||
कई भाषाएं जो इस शैली को लागू करती हैं, यह वर्णन कि कार्यक्रम को समस्यात्मक प्रांत के संदर्भ में क्या हासिल करना चाहिए करके दुष्प्रभाव को कम करने या समाप्त करने का प्रयास करती हैं, बजाय यह वर्णन करने के कि इसे क्रमादेशन भाषा [[भाषा आदिम|आद्य]] के अनुक्रम के रूप में कैसे पूरा किया जाए।<ref name="FOLDOC 2004">{{cite web | title=declarative language | website=FOLDOC | date=17 May 2004 | url=https://foldoc.org/declarative%20language | access-date=26 January 2020}}</ref> (भाषा के कार्यान्वयन के लिए कैसे छोड़ा जा रहा है)। यह [[अनिवार्य प्रोग्रामिंग|अनुकरणीय कार्यरचना]] के विपरीत है, जो [[कलन विधि]] को स्पष्ट चरणों में लागू करता है।<ref name="Sebesta 2016">{{cite book | last=Sebesta | first=Robert | title=Concepts of programming languages | publisher=Pearson | publication-place=Boston | year=2016 | isbn=978-0-13-394302-3 | oclc=896687896}}</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> | ||
घोषणात्मक | |||
सामान्य घोषणात्मक भाषाओं में [[क्वेरी भाषाएँ]] (जैसे, | सामान्य घोषणात्मक भाषाओं में आंकड़ाकोष [[क्वेरी भाषाएँ]] (जैसे, एसक्यूएल, एक्सक्वेरी), [[नियमित अभिव्यक्ति]]याँ, [[तर्क प्रोग्रामिंग|तर्क कार्यरचना]], [[कार्यात्मक प्रोग्रामिंग|कार्यात्मक कार्यरचना]] और [[कॉन्फ़िगरेशन प्रबंधन डेटाबेस|समाकृतिक प्रबंधन आंकड़ाकोष]] प्रणाली शामिल हैं। | ||
== परिभाषा == | == परिभाषा == | ||
घोषणात्मक | घोषणात्मक कार्यरचना को अक्सर कार्यरचना की किसी भी शैली के रूप में परिभाषित किया जाता है जो अनुकरणीय कार्यरचना नहीं है। कई अन्य सामान्य परिभाषाएँ इसकी अनुकरणीय कार्यरचना के साथ तुलना करके इसे परिभाषित करने का प्रयास करती हैं। उदाहरण के लिए: | ||
* एक उच्च-स्तरीय कार्यक्रम जो वर्णन करता है कि | * एक उच्च-स्तरीय कार्यक्रम जो वर्णन करता है कि संगणना को क्या करना चाहिए। | ||
* कोई भी | * कोई भी कार्यरचना भाषा जिसमें दुष्प्रभाव का अभाव है (या अधिक विशेष रूप से, संदर्भित पारदर्शिता है) | ||
* [[गणितीय तर्क]] के स्पष्ट | * [[गणितीय तर्क]] के स्पष्ट अनुरूपता वाली भाषा।<ref>{{cite thesis |first=Manuel M. T. |last=Chakravarty |date=14 February 1997 |url=http://www.cse.unsw.edu.au/~chak/papers/diss.ps.gz |title=On the Massively Parallel Execution of Declarative Programs |type=Doctoral dissertation |publisher=[[Technical University of Berlin]] |access-date=26 February 2015 |quote=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.}}</ref> | ||
ये परिभाषाएँ काफी हद तक | ये परिभाषाएँ काफी हद तक अतिव्यापन करती हैं। | ||
घोषणात्मक | घोषणात्मक कार्यरचना कार्यरचना की एक गैर-अनुकरणीय शैली है जिसमें कार्यक्रम स्पष्ट रूप से सूचीबद्ध आदेशों या चरणों को सूचीबद्ध किए बिना अपने वांछित परिणामों का वर्णन करते हैं जिन्हें निष्पादित किया जाना चाहिए। कार्यात्मक कार्यरचना और [[तार्किक प्रोग्रामिंग|तार्किक कार्यरचना]] भाषाओं की विशेषता घोषणात्मक कार्यरचना शैली है। तार्किक कार्यरचना में, कार्यक्रम में तार्किक प्रकथन होते हैं, और कार्यक्रम प्रकथन के प्रमाण की खोज करके निष्पादित होता है। | ||
[[शुद्ध कार्यात्मक भाषा]] में, जैसे कि [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल (कार्यरचना भाषा)]], में सभी कार्य बिना दुष्प्रभाव के होते हैं, और स्थितिपरिवर्तन केवल ऐसे कार्यों के रूप में प्रस्तुत किए जाते हैं जो स्थिति को बदलते हैं, जो स्पष्ट रूप से कार्यक्रम में प्रथम श्रेणी की वस्तु के रूप में दर्शाए जाते हैं। हालांकि शुद्ध कार्यात्मक भाषाएं गैर-अनुकरणीय हैं, वे अक्सर किसी फलन के प्रभाव को चरणों की श्रृंखला के रूप में वर्णित करने के लिए सुविधा प्रदान करती हैं। अन्य कार्यात्मक भाषाएँ, जैसे [[लिस्प (प्रोग्रामिंग भाषा)|लिस्प (कार्यरचना भाषा)]], [[OCaml]] (ओकैमल) और [[Erlang (प्रोग्रामिंग भाषा)|Erlang (एरलांग)]], प्रक्रियात्मक और कार्यात्मक कार्यरचना के मिश्रण का समर्थन करती हैं। | |||
कुछ तार्किक | कुछ तार्किक कार्यरचना भाषाएं, जैसे कि [[प्रोलॉग]], और आंकड़ाकोष क्वेरी भाषाएं, जैसे कि SQL, सिद्धांत रूप में घोषणात्मक होते हुए भी कार्यरचना की प्रक्रियात्मक शैली का समर्थन करती हैं। | ||
== उप-प्रतिमान == | == उप-प्रतिमान == | ||
घोषणात्मक | घोषणात्मक कार्यरचना [[व्यापक शब्द]] है जिसमें कई बेहतर ज्ञात कार्यरचना प्रतिमान शामिल हैं। | ||
=== [[बाधा प्रोग्रामिंग]] === | === [[बाधा प्रोग्रामिंग|प्रतिबंध कार्यरचना]] === | ||
प्रतिबंध कार्यरचना प्रतिबंधओं के रूप में चर के बीच संबंध बताती है जो लक्ष्य समाधान के गुणों को निर्दिष्ट करती है। प्रतिबंधओं के समुच्चय को प्रत्येक चर के लिए मान देकर हल किया जाता है ताकि समाधान प्रतिबंधओं की अधिकतम संख्या के अनुरूप हो। प्रतिबंध कार्यरचना अक्सर अन्य प्रतिमानों का पूरक होता है: कार्यात्मक, तार्किक या यहां तक कि अनुकरणीय कार्यरचना। | |||
===[[डोमेन-विशिष्ट भाषा]]एं=== | ===[[डोमेन-विशिष्ट भाषा|प्रांत -विशिष्ट भाषा]]एं=== | ||
घोषणात्मक | घोषणात्मक प्रांत -विशिष्ट भाषाओं (DSL) के प्रसिद्ध उदाहरणों में [[yacc]] पार्सर जनित्र निवेश भाषा, [[QML]], मेक (सॉफ़्टवेयर) बिल्ड विनिर्देशन भाषा, पपेट (सॉफ़्टवेयर) की समाकृतिक प्रबंधन भाषा, नियमित अभिव्यक्तियाँ और SQL का उप-समुच्चय शामिल हैं (उदाहरण के लिए, चयन क्वेरी)। DSLs के पास उपयोगी होने का लाभ है जबकि [[ट्यूरिंग-पूर्ण]] होने की आवश्यकता नहीं है, जिससे किसी भाषा के लिए विशुद्ध रूप से घोषणात्मक होना आसान हो जाता है। | ||
कई मार्कअप भाषाएँ जैसे [[HTML]], [[MXML]], [[XAML]], [[XSLT]] या अन्य [[उपयोगकर्ता-इंटरफ़ेस मार्कअप भाषा]] | कई मार्कअप भाषाएँ जैसे [[HTML]], [[MXML]], [[XAML]], [[XSLT]] या अन्य [[उपयोगकर्ता-इंटरफ़ेस मार्कअप भाषा|उपयोगकर्ता-अंतरापृष्ठ मार्कअप भाषाएँ]] अक्सर घोषणात्मक होती हैं। उदाहरण के लिए, HTML केवल यह बताता है कि वेबपेज पर क्या दिखाई देना चाहिए - यह न तो किसी पेज को प्रस्तुत करने के लिए नियंत्रण प्रवाह और न ही किसी उपयोगकर्ता के साथ पेज के संभावित [[ह्यूमन कंप्यूटर इंटरेक्शन|पारस्परिक व्यवहार]] को निर्दिष्ट करता है। | ||
2013 तक, कुछ सॉफ्टवेयर प्रणाली पारंपरिक उपयोगकर्ता-अंतरापृष्ठ मार्कअप भाषाओं (जैसे HTML) को घोषणात्मक मार्कअप के साथ संयोजित करता है जो परिभाषित करता है कि पश्च-भाग परिसेवक प्रणाली को घोषित अंतरापृष्ठ का समर्थन करने के लिए क्या करना चाहिए (लेकिन कैसे नहीं)। ऐसी प्रणालियाँ, आमतौर पर प्रांत -विशिष्ट XML नामस्थान का उपयोग करते हुए, प्रतिनिधित्वात्मक स्थिति स्थानान्तरण (REST) और [[SOAP]] का उपयोग करके वेब सेवाओं के लिए SQL आंकड़ाकोष रचनाक्रम या पैरामिट्रीकृत कॉल के अमूर्त शामिल कर सकती हैं। | |||
=== कार्यात्मक | |||
हास्केल ( | === कार्यात्मक कार्यरचना === | ||
हास्केल (कार्यरचना लैंग्वेज), स्कीम (कार्यरचना लैंग्वेज), और [[मानक एमएल|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 और लिस्प परिवारों में से अधिकांश कार्यात्मक भाषाएं शामिल हैं, [[विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग|विशुद्ध रूप से कार्यात्मक कार्यरचना]] नहीं हैं, और इस प्रकार कार्यक्रमों में राज्यव्यापी प्रभावों (कंप्यूटर विज्ञान) की शुरुआत की अनुमति देती हैं, हालांकि जब संभव हो तो आमतौर पर इससे बचा जाता है। | |||
=== संकर भाषाएं === | === संकर भाषाएं === | ||
उदाहरण के लिए, मेकफाइल्स, एक घोषणात्मक फैशन में निर्भरता को निर्दिष्ट करते हैं,<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> | |||
भौतिक प्रणालियों के | |||
Line 54: | Line 53: | ||
=== लिस्प === | === लिस्प === | ||
लिस्प ( | लिस्प (कार्यरचना लैंग्वेज) (1958) का अर्थ "लिस्ट प्रोसेसर" है।<ref name="ArtOfLisp">{{cite book | ||
| last1=Jones | | last1=Jones | ||
| first1=Robin | | first1=Robin | ||
Line 65: | Line 64: | ||
| publisher=Springer Science & Business Media | | publisher=Springer Science & Business Media | ||
| isbn=9781447117193 | | isbn=9781447117193 | ||
| page=2}}</ref> यह | | page=2}}</ref> यह [[सूची (सार डेटा प्रकार)|सूचियों (सार डेटा प्रकार)]] को संसाधित करने के लिए तैयार किया गया है। सूचियों की सूची बनाकर डेटा संरचना बनाई जाती है। स्मृति में, यह [[वृक्ष (डेटा संरचना)]] बनाता है। आंतरिक रूप से, विशिष्ट लिस्प डेटा की वृक्ष संरचना [[रिकर्सन (कंप्यूटर विज्ञान)|पुनरावर्ती (कंप्यूटर विज्ञान)]] कार्यों के साथ प्रसंस्करण के लिए खुद को अच्छी तरह से ऋअण देती है।<ref name="cpl_3rd-ch9-220">{{cite book | ||
| last = Wilson | | last = Wilson | ||
| first = Leslie B. | | first = Leslie B. | ||
Line 72: | Line 71: | ||
| page = 220 | | page = 220 | ||
| isbn = 0-201-71012-9 | | isbn = 0-201-71012-9 | ||
}}</ref> | }}</ref> [[वृक्ष (डेटा संरचना)]] बनाने का वाक्य-विन्यास खाली स्थान से अलग किए गए [[तत्व (गणित)]] को कोष्ठक में बंद करना है। निम्नलिखित तीन तत्वों की एक सूची है। पहले दो तत्व स्वयं दो तत्वों की सूची हैं: | ||
<code>((A B) (HELLO WORLD) 94)</code> | <code>((A B) (HELLO WORLD) 94)</code> | ||
लिस्प में तत्वों को निकालने और पुनर्निर्माण करने का कार्य है।<ref name="cpl_3rd-ch9-221">{{cite book | लिस्प में तत्वों को निकालने और पुनर्निर्माण करने का कार्य है।<ref name="cpl_3rd-ch9-221">{{cite book | ||
| last = Wilson | | last = Wilson | ||
Line 87: | Line 87: | ||
उपरोक्त कोड सूची की एक प्रति लौटाता है <code>X</code>. जैसा कि कार्यात्मक भाषाओं में विशिष्ट है, लिस्प में संचालन अक्सर पुराने डेटा से नए डेटा का उत्पादन करने के लिए कहा जाने पर डेटा कॉपी करता है। लिस्प डेटा की वृक्ष संरचना इसे भी सुगम बनाती है: पहले से मौजूद डेटा से बनी एक नई संरचना अपनी आंतरिक संरचना को जितना संभव हो उतना अपने पूर्ववर्ती के साथ साझा करती है, पेड़ की शाखाओं के रूप में संग्रहीत नए परिवर्धन के साथ, और मूल संरचना के संदर्भ में इसका मूल नाम ठीक वैसा ही होगा और इससे अधिक नहीं। | उपरोक्त कोड सूची की एक प्रति लौटाता है <code>X</code>. जैसा कि कार्यात्मक भाषाओं में विशिष्ट है, लिस्प में संचालन अक्सर पुराने डेटा से नए डेटा का उत्पादन करने के लिए कहा जाने पर डेटा कॉपी करता है। लिस्प डेटा की वृक्ष संरचना इसे भी सुगम बनाती है: पहले से मौजूद डेटा से बनी एक नई संरचना अपनी आंतरिक संरचना को जितना संभव हो उतना अपने पूर्ववर्ती के साथ साझा करती है, पेड़ की शाखाओं के रूप में संग्रहीत नए परिवर्धन के साथ, और मूल संरचना के संदर्भ में इसका मूल नाम ठीक वैसा ही होगा और इससे अधिक नहीं। | ||
लिस्प की एक खामी यह है कि जब कई फ़ंक्शन नेस्टेड होते हैं, तो कोष्ठक भ्रामक लग सकते हैं।<ref name="cpl_3rd-ch9-230">{{cite book | लिस्प की एक खामी यह है कि जब कई फ़ंक्शन नेस्टेड होते हैं, तो कोष्ठक भ्रामक लग सकते हैं।<nowiki><ref name="cpl_3rd-ch9-230"></nowiki>{{cite book | ||
| last = Wilson | | last = Wilson | ||
| first = Leslie B. | | first = Leslie B. | ||
Line 94: | Line 94: | ||
| page = 230 | | page = 230 | ||
| isbn = 0-201-71012-9 | | isbn = 0-201-71012-9 | ||
}}</ref> | }}</ref> फलन कार (कभी-कभी पहले कहा जाता है) सूची में पहला तत्व लौटाता है। फलन cdr (कभी-कभी 'आराम' कहा जाता है) एक सूची देता है जिसमें सब कुछ होता है लेकिन पहला तत्व नहीं होता है। फलन विपक्ष एक सूची देता है जो दो डेटा तत्वों का संयोजन है। इसलिए, निम्न अभिव्यक्ति सूची X वापस कर देगी: | ||
<code>(cons (car x) (cdr x))</code> | |||
उपरोक्त कोड सूची X की प्रति लौटाता है। जैसा कि कार्यात्मक भाषाओं में विशिष्ट है, लिस्प में संचालन अक्सर पुराने डेटा से नए डेटा का उत्पादन करने के लिए कहा जाने पर डेटा प्रति करता है। लिस्प डेटा की वृक्ष संरचना इसे भी सुगम बनाती है: पहले से मौजूद डेटा से बनी नई संरचना अपनी आंतरिक संरचना को जितना संभव हो उतना अपने पूर्ववर्ती के साथ साझा करती है, पेड़ की शाखाओं के रूप में संग्रहीत नए परिवर्धन के साथ, और मूल संरचना को इसके मूल नाम के संदर्भ में ठीक वैसा ही लौटेगा और इससे अधिक नहीं। | |||
लिस्प की एक खामी यह है कि जब कई कार्य नीड़ित होते हैं, तो कोष्ठक भ्रमित करने वाले लग सकते हैं।आधुनिक लिस्प [[एकीकृत विकास पर्यावरण]] कोष्ठक मिलान सुनिश्चित करने में मदद करता है। एक तरफ के रूप में, लिस्प समनुदेशन विवरण और गोटो लूप्स ( छोरों ) के अनुकरणीय भाषा संचालन का समर्थन करता है।<ref name="cpl_3rd-ch9-229">{{cite book | |||
| last = Wilson | | last = Wilson | ||
| first = Leslie B. | | first = Leslie B. | ||
Line 103: | Line 109: | ||
}}</ रेफ> साथ ही, लिस्प संकलन समय पर तत्वों के [[डेटा प्रकार]] से संबंधित नहीं है। इसके बजाय, यह रनटाइम पर डेटाटाइप्स को असाइन करता है। इससे विकास प्रक्रिया में प्रोग्रामिंग त्रुटियों का जल्दी पता नहीं चल सकता है। इसका प्रतिकार करने के लिए, लिस्प विकास को आम तौर पर अत्यधिक वृद्धिशील तरीके से किया जाता है, जिसमें कार्यों और उच्च-क्रम के कार्यों का निर्माण किया जाता है और विकास के दौरान लाइव परीक्षण किया जाता है। इसके अतिरिक्त, मैक्रो (कंप्यूटर साइंस) # सिंटैक्टिक मैक्रोज़ के उपयोग के माध्यम से, जो लिस्प फ़ंक्शंस हैं जो लिस्प प्रोग्राम्स पर डेटा संरचनाओं के रूप में संचालित होते हैं, टाइप चेकिंग किसी भी बिंदु पर प्रोग्रामर की इच्छा से विवेकपूर्ण रूप से की जा सकती है। | }}</ रेफ> साथ ही, लिस्प संकलन समय पर तत्वों के [[डेटा प्रकार]] से संबंधित नहीं है। इसके बजाय, यह रनटाइम पर डेटाटाइप्स को असाइन करता है। इससे विकास प्रक्रिया में प्रोग्रामिंग त्रुटियों का जल्दी पता नहीं चल सकता है। इसका प्रतिकार करने के लिए, लिस्प विकास को आम तौर पर अत्यधिक वृद्धिशील तरीके से किया जाता है, जिसमें कार्यों और उच्च-क्रम के कार्यों का निर्माण किया जाता है और विकास के दौरान लाइव परीक्षण किया जाता है। इसके अतिरिक्त, मैक्रो (कंप्यूटर साइंस) # सिंटैक्टिक मैक्रोज़ के उपयोग के माध्यम से, जो लिस्प फ़ंक्शंस हैं जो लिस्प प्रोग्राम्स पर डेटा संरचनाओं के रूप में संचालित होते हैं, टाइप चेकिंग किसी भी बिंदु पर प्रोग्रामर की इच्छा से विवेकपूर्ण रूप से की जा सकती है। | ||
बड़े, विश्वसनीय और पठनीय लिस्प प्रोग्राम लिखने के लिए पूर्वविचार की आवश्यकता होती है। यदि ठीक से योजना बनाई जाए, तो कार्यक्रम समकक्ष अनिवार्य भाषा कार्यक्रम की तुलना में बहुत छोटा हो सकता | बड़े, विश्वसनीय और पठनीय लिस्प प्रोग्राम लिखने के लिए पूर्वविचार की आवश्यकता होती है। यदि ठीक से योजना बनाई जाए, तो कार्यक्रम समकक्ष अनिवार्य भाषा कार्यक्रम की तुलना में बहुत छोटा हो सकता है।कृत्रिम बुद्धिमत्ता में लिस्प का व्यापक रूप से उपयोग किया जाता है। हालाँकि, इसके उपयोग को केवल इसलिए स्वीकार किया गया है क्योंकि इसमें अनिवार्य भाषा संचालन हैं, जिससे अनपेक्षित दुष्प्रभाव संभव हैं।<nowiki><ref name="cpl_3rd-ch9-241"></nowiki>{{cite book | ||
| last = Wilson | | last = Wilson | ||
| first = Leslie B. | | first = Leslie B. | ||
Line 112: | Line 118: | ||
}}</रेफरी> | }}</रेफरी> | ||
=== एमएल === | ===एमएल=== | ||
[[एमएल (प्रोग्रामिंग भाषा)]] (1973)<ref name="Gordon1996">{{cite web | [[एमएल (प्रोग्रामिंग भाषा)]] (1973)<nowiki><ref name="Gordon1996"></nowiki>{{cite web | ||
| last = Gordon | | last = Gordon | ||
| first = Michael J. C. | | first = Michael J. C. | ||
Line 120: | Line 126: | ||
| title = From LCF to HOL: a short history | | title = From LCF to HOL: a short history | ||
| url = http://www.cl.cam.ac.uk/~mjcg/papers/HolHistory.html | | url = http://www.cl.cam.ac.uk/~mjcg/papers/HolHistory.html | ||
| access-date = 2021-10-30}}</ref> | | access-date = 2021-10-30}}</ref> साथ ही, लिस्प संकलन समय पर तत्वों के डेटाटाइप से संबंधित नहीं है। इसके बजाय, यह रनटाइम पर डेटाटाइप्स प्रदान करता है। इससे विकास प्रक्रिया में कार्यरचना त्रुटियों का जल्दी पता नहीं चलता है। इसका प्रतिकार करने के लिए, लिस्प विकास को आम तौर पर अत्यधिक वृद्धिशील तरीके से किया जाता है, जिसमें कार्यों और उच्च-क्रम के कार्यों का निर्माण किया जाता है और विकास के दौरान लाइव परीक्षण किया जाता है। इसके अतिरिक्त, मैक्रोज़ के उपयोग के माध्यम से, जो कि लिस्प फलन हैं जो डेटा संरचनाओं के रूप में लिस्प कार्यक्रमों पर काम करते हैं, क्रमादेशक की इच्छानुसार किसी भी बिंदु पर प्रकार जहां विवेकपूर्ण ढंग से की जा सकती है। | ||
बड़े, विश्वसनीय और पठनीय लिस्प प्रोग्राम लिखने के लिए पूर्वविचार की आवश्यकता होती है। अगर सही ढंग से योजना बनाई जाए, तो कार्यक्रम समकक्ष अनुकरणीय भाषा कार्यक्रम से बहुत छोटा हो सकता है। कृत्रिम बुद्धिमत्ता में लिस्प का व्यापक रूप से उपयोग किया जाता है। हालांकि, इसके उपयोग को केवल इसलिए स्वीकार किया गया है क्योंकि इसमें अनुकरणीय भाषा संक्रियाएं हैं, जिससे अनपेक्षित दुष्प्रभाव संभव हैं। | |||
=== ML === | |||
ML (1973) का अर्थ "मेटा लैंग्वेज" है। ML वैधानिक रूप से टाइप किया गया है, और फलन तर्क और रिटर्न प्रकार सटीक किए जा सकते हैं। | |||
<code>fun times_10(n : int) : int = 10 * n;</code> | |||
ML लिस्प की तरह कोष्ठक-विलक्षण नहीं है। निम्नलिखित <code>times_10</code>का एक आवेदन है: | |||
<code>times_10 2</code> | |||
यह "20: int", यानी 20, प्रकार int का मान लौटाता है। | |||
लिस्प की तरह, ML प्रक्रिया सूचियों के अनुरूप है, हालांकि सूची के सभी तत्व एक ही प्रकार के होने चाहिए। | |||
लिस्प की तरह, | |||
=== प्रोलॉग === | === प्रोलॉग === | ||
प्रोलॉग (1972) लॉजिक में | प्रोलॉग (1972) का अर्थ "लॉजिक में कार्यरचना" है। इसे प्राकृतिक भाषाओं को संसाधित करने के लिए डिज़ाइन किया गया था। [18] प्रोलॉग प्रोग्राम के रचक खंड 'ऑब्जेक्ट्स' (वस्तुएँ) और 'उनके संबंध अन्य ऑब्जेक्ट्स से' हैं। ऑब्जेक्ट्स उनके बारे में सही तथ्य बताते हुए बनाई जाती हैं। | ||
[[सेट (गणित)|समुच्चय (गणित)]] सिद्धांत तथ्यों को समुच्चय में ऑब्जेक्ट निर्दिष्ट करके बनाया जाता है। वाक्य-विन्यास <code>setName(object)</code> है। | |||
*बिल्ली एक जानवर है। | *बिल्ली एक जानवर है। | ||
: <code>animal(cat).</code> | : <code>animal(cat).</code> | ||
Line 160: | Line 156: | ||
* जेरी एक चूहा है। | * जेरी एक चूहा है। | ||
: <code>mouse(jerry).</code> | : <code>mouse(jerry).</code> | ||
[[विशेषण]] | [[विशेषण]] तथ्य <code>adjective(object)</code>का उपयोग करके बनाया जाता है | ||
* बिल्ली बड़ी है। | * बिल्ली बड़ी है। | ||
: <code>big(cat).</code> | : <code>big(cat).</code> | ||
Line 171: | Line 167: | ||
: <code>eat(big,small).</code> | : <code>eat(big,small).</code> | ||
सभी तथ्यों और संबंधों को दर्ज करने के बाद, एक प्रश्न पूछा जा सकता है: | सभी तथ्यों और संबंधों को दर्ज करने के बाद, एक प्रश्न पूछा जा सकता है: | ||
: क्या टॉम जेरी खाएगा? | : क्या टॉम जेरी को खाएगा? | ||
: <code>?- eat(tom,jerry).</code> | : <code>?- eat(tom,jerry).</code> | ||
प्रोलॉग का उपयोग लक्ष्य-उन्मुख भाषा बनने के लिए विस्तारित हुआ है।<ref name="cpl_3rd-ch10-245">{{cite book | प्रोलॉग का उपयोग लक्ष्य-उन्मुख भाषा बनने के लिए विस्तारित हुआ है।<ref name="cpl_3rd-ch10-245">{{cite book | ||
Line 180: | Line 176: | ||
| page = 245 | | page = 245 | ||
| isbn = 0-201-71012-9 | | isbn = 0-201-71012-9 | ||
}}</ref> लक्ष्य-उन्मुख अनुप्रयोग में, लक्ष्य को उप-लक्ष्यों की | }}</ref> लक्ष्य-उन्मुख अनुप्रयोग में, लक्ष्य को उप-लक्ष्यों की सूची प्रदान करके परिभाषित किया जाता है। फिर प्रत्येक उप-लक्ष्य को उसके उप-लक्ष्यों, आदि की सूची प्रदान करके परिभाषित किया जाता है। यदि उप-लक्ष्यों का मार्ग समाधान खोजने में विफल रहता है, तो उस उपलक्ष्य को पीछे कर दिया जाता है और दूसरे पथ का व्यवस्थित रूप से प्रयास किया जाता है।<ref name="cpl_3rd-ch10-246">{{cite book | ||
| last = Wilson | | last = Wilson | ||
| first = Leslie B. | | first = Leslie B. | ||
Line 187: | Line 183: | ||
| page = 246 | | page = 246 | ||
| isbn = 0-201-71012-9 | | isbn = 0-201-71012-9 | ||
}}</ref> व्यावहारिक अनुप्रयोगों में [[सबसे छोटी पथ समस्या]] को हल करना | }}</ref> व्यावहारिक अनुप्रयोगों में [[सबसे छोटी पथ समस्या]] को हल करना<ref name="PrologHistory"/>और परिवार के पेड़ का उत्पादन करना शामिल है। | ||
== यह भी देखें == | == यह भी देखें == | ||
* [[प्रोग्रामिंग प्रतिमानों की तुलना]] | * [[प्रोग्रामिंग प्रतिमानों की तुलना|कार्यरचना प्रतिमानों की तुलना]] | ||
* [[आगमनात्मक प्रोग्रामिंग]] | * [[आगमनात्मक प्रोग्रामिंग|आगमनात्मक कार्यरचना]] | ||
* प्रकार के अनुसार | * प्रकार के अनुसार कार्यरचना भाषाओं की सूची#Declarative_languages | ||
==संदर्भ== | ==संदर्भ== | ||
Line 215: | Line 204: | ||
{{Types of programming languages}} | {{Types of programming languages}} | ||
{{Authority control}} | {{Authority control}} | ||
[[Category: | [[Category:Collapse templates]] | ||
[[Category:Commons category link is the pagename]] | |||
[[Category:Created On 16/02/2023]] | [[Category:Created On 16/02/2023]] | ||
[[Category:Lua-based templates]] | |||
[[Category:Machine Translated Page]] | |||
[[Category:Navigational boxes| ]] | |||
[[Category:Navigational boxes without horizontal lists]] | |||
[[Category:Pages with reference errors]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Short description with empty Wikidata description]] | |||
[[Category:Sidebars with styles needing conversion]] | |||
[[Category:Template documentation pages|Documentation/doc]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:Templates generating microformats]] | |||
[[Category:Templates that add a tracking category]] | |||
[[Category:Templates that are not mobile friendly]] | |||
[[Category:Templates that generate short descriptions]] | |||
[[Category:Templates using TemplateData]] | |||
[[Category:Webarchive template wayback links]] | |||
[[Category:Wikipedia metatemplates]] | |||
[[Category:घोषणात्मक प्रोग्रामिंग| घोषणात्मक प्रोग्रामिंग ]] | |||
[[Category:प्रोग्रामिंग प्रतिमान]] |
Latest revision as of 20:12, 4 March 2023
कंप्यूटर विज्ञान में, घोषणात्मक कार्यरचना कार्यरचना प्रतिमान है - संरचना और कंप्यूटर कार्यक्रम (प्रोग्राम) के तत्वों के निर्माण की एक शैली - जो इसके नियंत्रण प्रवाह का वर्णन किए बिना गणना के तर्क को व्यक्त करती है।[1]
कई भाषाएं जो इस शैली को लागू करती हैं, यह वर्णन कि कार्यक्रम को समस्यात्मक प्रांत के संदर्भ में क्या हासिल करना चाहिए करके दुष्प्रभाव को कम करने या समाप्त करने का प्रयास करती हैं, बजाय यह वर्णन करने के कि इसे क्रमादेशन भाषा आद्य के अनुक्रम के रूप में कैसे पूरा किया जाए।[2] (भाषा के कार्यान्वयन के लिए कैसे छोड़ा जा रहा है)। यह अनुकरणीय कार्यरचना के विपरीत है, जो कलन विधि को स्पष्ट चरणों में लागू करता है।[3]
घोषणात्मक कार्यरचना अक्सर कार्यक्रम (मशीन) को औपचारिक तर्क के सिद्धांतों के रूप में मानती है, और और संगणना को उस तर्क स्थान में निगमन के रूप में मानती है। घोषणात्मक कार्यरचना समानांतर कार्यक्रमों को लिखने को बहुत आसान बना सकती है।[4]
सामान्य घोषणात्मक भाषाओं में आंकड़ाकोष क्वेरी भाषाएँ (जैसे, एसक्यूएल, एक्सक्वेरी), नियमित अभिव्यक्तियाँ, तर्क कार्यरचना, कार्यात्मक कार्यरचना और समाकृतिक प्रबंधन आंकड़ाकोष प्रणाली शामिल हैं।
परिभाषा
घोषणात्मक कार्यरचना को अक्सर कार्यरचना की किसी भी शैली के रूप में परिभाषित किया जाता है जो अनुकरणीय कार्यरचना नहीं है। कई अन्य सामान्य परिभाषाएँ इसकी अनुकरणीय कार्यरचना के साथ तुलना करके इसे परिभाषित करने का प्रयास करती हैं। उदाहरण के लिए:
- एक उच्च-स्तरीय कार्यक्रम जो वर्णन करता है कि संगणना को क्या करना चाहिए।
- कोई भी कार्यरचना भाषा जिसमें दुष्प्रभाव का अभाव है (या अधिक विशेष रूप से, संदर्भित पारदर्शिता है)
- गणितीय तर्क के स्पष्ट अनुरूपता वाली भाषा।[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)
लिस्प में तत्वों को निकालने और पुनर्निर्माण करने का कार्य है।[11] फलन कार (कभी-कभी पहले कहा जाता है) सूची में पहला तत्व लौटाता है। फलन cdr (कभी-कभी 'आराम' कहा जाता है) एक सूची देता है जिसमें सब कुछ होता है लेकिन पहला तत्व नहीं होता है। फलन विपक्ष एक सूची देता है जो दो डेटा तत्वों का संयोजन है। इसलिए, निम्न अभिव्यक्ति सूची X वापस कर देगी:
(cons (car x) (cdr x))
उपरोक्त कोड सूची X की प्रति लौटाता है। जैसा कि कार्यात्मक भाषाओं में विशिष्ट है, लिस्प में संचालन अक्सर पुराने डेटा से नए डेटा का उत्पादन करने के लिए कहा जाने पर डेटा प्रति करता है। लिस्प डेटा की वृक्ष संरचना इसे भी सुगम बनाती है: पहले से मौजूद डेटा से बनी नई संरचना अपनी आंतरिक संरचना को जितना संभव हो उतना अपने पूर्ववर्ती के साथ साझा करती है, पेड़ की शाखाओं के रूप में संग्रहीत नए परिवर्धन के साथ, और मूल संरचना को इसके मूल नाम के संदर्भ में ठीक वैसा ही लौटेगा और इससे अधिक नहीं।
लिस्प की एक खामी यह है कि जब कई कार्य नीड़ित होते हैं, तो कोष्ठक भ्रमित करने वाले लग सकते हैं।आधुनिक लिस्प एकीकृत विकास पर्यावरण कोष्ठक मिलान सुनिश्चित करने में मदद करता है। एक तरफ के रूप में, लिस्प समनुदेशन विवरण और गोटो लूप्स ( छोरों ) के अनुकरणीय भाषा संचालन का समर्थन करता है।[12] साथ ही, लिस्प संकलन समय पर तत्वों के डेटाटाइप से संबंधित नहीं है। इसके बजाय, यह रनटाइम पर डेटाटाइप्स प्रदान करता है। इससे विकास प्रक्रिया में कार्यरचना त्रुटियों का जल्दी पता नहीं चलता है। इसका प्रतिकार करने के लिए, लिस्प विकास को आम तौर पर अत्यधिक वृद्धिशील तरीके से किया जाता है, जिसमें कार्यों और उच्च-क्रम के कार्यों का निर्माण किया जाता है और विकास के दौरान लाइव परीक्षण किया जाता है। इसके अतिरिक्त, मैक्रोज़ के उपयोग के माध्यम से, जो कि लिस्प फलन हैं जो डेटा संरचनाओं के रूप में लिस्प कार्यक्रमों पर काम करते हैं, क्रमादेशक की इच्छानुसार किसी भी बिंदु पर प्रकार जहां विवेकपूर्ण ढंग से की जा सकती है।
बड़े, विश्वसनीय और पठनीय लिस्प प्रोग्राम लिखने के लिए पूर्वविचार की आवश्यकता होती है। अगर सही ढंग से योजना बनाई जाए, तो कार्यक्रम समकक्ष अनुकरणीय भाषा कार्यक्रम से बहुत छोटा हो सकता है। कृत्रिम बुद्धिमत्ता में लिस्प का व्यापक रूप से उपयोग किया जाता है। हालांकि, इसके उपयोग को केवल इसलिए स्वीकार किया गया है क्योंकि इसमें अनुकरणीय भाषा संक्रियाएं हैं, जिससे अनपेक्षित दुष्प्रभाव संभव हैं।
ML
ML (1973) का अर्थ "मेटा लैंग्वेज" है। ML वैधानिक रूप से टाइप किया गया है, और फलन तर्क और रिटर्न प्रकार सटीक किए जा सकते हैं।
fun times_10(n : int) : int = 10 * n;
ML लिस्प की तरह कोष्ठक-विलक्षण नहीं है। निम्नलिखित times_10
का एक आवेदन है:
times_10 2
यह "20: int", यानी 20, प्रकार int का मान लौटाता है।
लिस्प की तरह, ML प्रक्रिया सूचियों के अनुरूप है, हालांकि सूची के सभी तत्व एक ही प्रकार के होने चाहिए।
प्रोलॉग
प्रोलॉग (1972) का अर्थ "लॉजिक में कार्यरचना" है। इसे प्राकृतिक भाषाओं को संसाधित करने के लिए डिज़ाइन किया गया था। [18] प्रोलॉग प्रोग्राम के रचक खंड 'ऑब्जेक्ट्स' (वस्तुएँ) और 'उनके संबंध अन्य ऑब्जेक्ट्स से' हैं। ऑब्जेक्ट्स उनके बारे में सही तथ्य बताते हुए बनाई जाती हैं।
समुच्चय (गणित) सिद्धांत तथ्यों को समुच्चय में ऑब्जेक्ट निर्दिष्ट करके बनाया जाता है। वाक्य-विन्यास 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).
प्रोलॉग का उपयोग लक्ष्य-उन्मुख भाषा बनने के लिए विस्तारित हुआ है।[13] लक्ष्य-उन्मुख अनुप्रयोग में, लक्ष्य को उप-लक्ष्यों की सूची प्रदान करके परिभाषित किया जाता है। फिर प्रत्येक उप-लक्ष्य को उसके उप-लक्ष्यों, आदि की सूची प्रदान करके परिभाषित किया जाता है। यदि उप-लक्ष्यों का मार्ग समाधान खोजने में विफल रहता है, तो उस उपलक्ष्य को पीछे कर दिया जाता है और दूसरे पथ का व्यवस्थित रूप से प्रयास किया जाता है।[14] व्यावहारिक अनुप्रयोगों में सबसे छोटी पथ समस्या को हल करना[15]और परिवार के पेड़ का उत्पादन करना शामिल है।
यह भी देखें
- कार्यरचना प्रतिमानों की तुलना
- आगमनात्मक कार्यरचना
- प्रकार के अनुसार कार्यरचना भाषाओं की सूची#Declarative_languages
संदर्भ
- ↑ Lloyd, J.W., Practical Advantages of Declarative Programming
- ↑ "declarative language". FOLDOC. 17 May 2004. Retrieved 26 January 2020.
- ↑ Sebesta, Robert (2016). Concepts of programming languages. Boston: Pearson. ISBN 978-0-13-394302-3. OCLC 896687896.
- ↑ "DAMP 2009: Workshop on Declarative Aspects of Multicore Programming". Cse.unsw.edu.au. 20 January 2009. Retrieved 15 August 2013.
- ↑ 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.
- ↑ "Revised7 Report on the Algorithmic Language Scheme" (PDF). Scheme Working Group 1. Retrieved 2020-12-05.
- ↑ [1] Archived October 23, 2007, at the Wayback Machine
- ↑ "Declarative modelling". Simulistics. Retrieved 15 August 2013.
- ↑ Jones, Robin; Maynard, Clive; Stewart, Ian (December 6, 2012). The Art of Lisp Programming. Springer Science & Business Media. p. 2. ISBN 9781447117193.
- ↑ Wilson, Leslie B. (2001). तुलनात्मक प्रोग्रामिंग भाषाएँ, तीसरा संस्करण. Addison-Wesley. p. 220. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). तुलनात्मक प्रोग्रामिंग भाषाएँ, तीसरा संस्करण. Addison-Wesley. p. 221. ISBN 0-201-71012-9.समारोह
car
(कई बार बुलानाfirst
) सूची में पहला तत्व लौटाता है। कार्यक्रमcdr
(कई बार बुलानाrest
) एक सूची देता है जिसमें सब कुछ होता है लेकिन पहला तत्व। कार्यक्रमcons
एक सूची लौटाता है जो दो डेटा तत्वों का संयोजन है। इसलिए, निम्न अभिव्यक्ति सूची वापस कर देगीX
:(cons (car x) (cdr x))
उपरोक्त कोड सूची की एक प्रति लौटाता हैX
. जैसा कि कार्यात्मक भाषाओं में विशिष्ट है, लिस्प में संचालन अक्सर पुराने डेटा से नए डेटा का उत्पादन करने के लिए कहा जाने पर डेटा कॉपी करता है। लिस्प डेटा की वृक्ष संरचना इसे भी सुगम बनाती है: पहले से मौजूद डेटा से बनी एक नई संरचना अपनी आंतरिक संरचना को जितना संभव हो उतना अपने पूर्ववर्ती के साथ साझा करती है, पेड़ की शाखाओं के रूप में संग्रहीत नए परिवर्धन के साथ, और मूल संरचना के संदर्भ में इसका मूल नाम ठीक वैसा ही होगा और इससे अधिक नहीं। लिस्प की एक खामी यह है कि जब कई फ़ंक्शन नेस्टेड होते हैं, तो कोष्ठक भ्रामक लग सकते हैं।<ref name="cpl_3rd-ch9-230">Wilson, Leslie B. (2001). तुलनात्मक प्रोग्रामिंग भाषाएँ, तीसरा संस्करण. Addison-Wesley. p. 230. ISBN 0-201-71012-9. - ↑ Wilson, Leslie B. (2001). तुलनात्मक प्रोग्रामिंग भाषाएँ, तीसरा संस्करण. Addison-Wesley. p. 229. ISBN 0-201-71012-9.</ रेफ> साथ ही, लिस्प संकलन समय पर तत्वों के डेटा प्रकार से संबंधित नहीं है। इसके बजाय, यह रनटाइम पर डेटाटाइप्स को असाइन करता है। इससे विकास प्रक्रिया में प्रोग्रामिंग त्रुटियों का जल्दी पता नहीं चल सकता है। इसका प्रतिकार करने के लिए, लिस्प विकास को आम तौर पर अत्यधिक वृद्धिशील तरीके से किया जाता है, जिसमें कार्यों और उच्च-क्रम के कार्यों का निर्माण किया जाता है और विकास के दौरान लाइव परीक्षण किया जाता है। इसके अतिरिक्त, मैक्रो (कंप्यूटर साइंस) # सिंटैक्टिक मैक्रोज़ के उपयोग के माध्यम से, जो लिस्प फ़ंक्शंस हैं जो लिस्प प्रोग्राम्स पर डेटा संरचनाओं के रूप में संचालित होते हैं, टाइप चेकिंग किसी भी बिंदु पर प्रोग्रामर की इच्छा से विवेकपूर्ण रूप से की जा सकती है।
बड़े, विश्वसनीय और पठनीय लिस्प प्रोग्राम लिखने के लिए पूर्वविचार की आवश्यकता होती है। यदि ठीक से योजना बनाई जाए, तो कार्यक्रम समकक्ष अनिवार्य भाषा कार्यक्रम की तुलना में बहुत छोटा हो सकता है।कृत्रिम बुद्धिमत्ता में लिस्प का व्यापक रूप से उपयोग किया जाता है। हालाँकि, इसके उपयोग को केवल इसलिए स्वीकार किया गया है क्योंकि इसमें अनिवार्य भाषा संचालन हैं, जिससे अनपेक्षित दुष्प्रभाव संभव हैं।<ref name="cpl_3rd-ch9-241">Wilson, Leslie B. (2001). तुलनात्मक प्रोग्रामिंग भाषाएँ, तीसरा संस्करण. Addison-Wesley. p. 241. ISBN 0-201-71012-9.</रेफरी>
एमएल
एमएल (प्रोग्रामिंग भाषा) (1973)<ref name="Gordon1996">Gordon, Michael J. C. (1996). "From LCF to HOL: a short history". Retrieved 2021-10-30.
- ↑ Wilson, Leslie B. (2001). तुलनात्मक प्रोग्रामिंग भाषाएँ, तीसरा संस्करण. Addison-Wesley. p. 245. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). तुलनात्मक प्रोग्रामिंग भाषाएँ, तीसरा संस्करण. Addison-Wesley. p. 246. ISBN 0-201-71012-9.
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs namedPrologHistory
बाहरी संबंध
- Frans Coenen. Characteristics of declarative programming languages. 1999.
- Robert Harper.
- Olof Torgersson. A Note on Declarative Programming Paradigms and the Future of Definitional Programming. 1996.