प्रोलॉग: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Programming language that uses first order logic}} {{About|the programming language|the narrative device|Prologue|other uses|Prologue (disambiguation)}} {{...")
 
No edit summary
Line 1: Line 1:
{{Short description|Programming language that uses first order logic}}
{{Short description|Programming language that uses first order logic}}
{{About|the programming language|the narrative device|Prologue|other uses|Prologue (disambiguation)}}
{{About|प्रोग्रामिंग भाषा|कथा उपकरण|प्रस्ताव|अन्य उपयोग|प्रस्ताव (बहुविकल्पी)}}
{{Infobox programming language
{{Infobox programming language
| paradigm = [[Logic programming|Logic]]
| paradigm = [[Logic programming|Logic]]
Line 16: Line 16:
| wikibooks = Prolog
| wikibooks = Prolog
}}
}}
प्रोलॉग एक [[तर्क प्रोग्रामिंग]] लैंग्वेज है जो [[कृत्रिम होशियारी]] और कम्प्यूटेशनल भाषाविज्ञान से जुड़ी है।<ref name=Clocksin2003>{{Cite book  | last1 = Clocksin | first1 = William F. | last2 = Mellish | first2 = Christopher S. | title = Programming in Prolog | year = 2003 | publisher = Springer-Verlag | location = Berlin; New York | isbn = 978-3-540-00678-7 }}</ref><ref name=Bratko2012>{{Cite book  | last1 = Bratko | first1 = Ivan | title = Prolog programming for artificial intelligence |edition = 4th | year = 2012 | publisher = Addison Wesley | location = Harlow, England; New York | isbn = 978-0-321-41746-6 }}</ref><ref name=Covington1994>{{Cite book  | last1 = Covington | first1 = Michael A. | title = Natural language processing for Prolog programmers | year = 1994 | publisher = Prentice Hall | location = Englewood Cliffs, N.J. | isbn = 978-0-13-629213-5 }}</ref>
प्रोलॉग एक [[तर्क प्रोग्रामिंग]] भाषा है जो [[कृत्रिम होशियारी|कृत्रिम सावधानी]] और कम्प्यूटेशनल भाषा विज्ञान से जुड़ी है।<ref name=Clocksin2003>{{Cite book  | last1 = Clocksin | first1 = William F. | last2 = Mellish | first2 = Christopher S. | title = Programming in Prolog | year = 2003 | publisher = Springer-Verlag | location = Berlin; New York | isbn = 978-3-540-00678-7 }}</ref><ref name=Bratko2012>{{Cite book  | last1 = Bratko | first1 = Ivan | title = Prolog programming for artificial intelligence |edition = 4th | year = 2012 | publisher = Addison Wesley | location = Harlow, England; New York | isbn = 978-0-321-41746-6 }}</ref><ref name=Covington1994>{{Cite book  | last1 = Covington | first1 = Michael A. | title = Natural language processing for Prolog programmers | year = 1994 | publisher = Prentice Hall | location = Englewood Cliffs, N.J. | isbn = 978-0-13-629213-5 }}</ref>
प्रोलॉग की जड़ें प्रथम-क्रम तर्क, एक [[औपचारिक तर्क]] में हैं, और कई अन्य प्रोग्रामिंग भाषाओं के विपरीत, प्रोलॉग मुख्य रूप से एक [[घोषणात्मक प्रोग्रामिंग]] भाषा के रूप में अभिप्रेत है: कार्यक्रम तर्क को अंतिम संबंध के रूप में व्यक्त किया जाता है, जिसे तथ्यों और अनुमान के नियम के रूप में दर्शाया जाता है। इन संबंधों पर एक क्वेरी चलाकर एक सं[[गणना]] शुरू की जाती है।<ref name=lloyd84/>
 
प्रोलॉग की जड़ें प्रथम-क्रम तर्क, एक [[औपचारिक तर्क]] में हैं, और कई अन्य प्रोग्रामिंग भाषाओं के विपरीत, प्रोलॉग मुख्य रूप से एक [[घोषणात्मक प्रोग्रामिंग]] भाषा के रूप में अभिप्रेत है: कार्यक्रम तर्क को अंतिम संबंध के रूप में व्यक्त किया जाता है, जिसे तथ्यों और अनुमान के नियम के रूप में दर्शाया जाता है। इन संबंधों पर एक क्वेरी चलाकर एक [[गणना|संगणना]] प्रारंभ की जाती है।<ref name="lloyd84" />


एडिनबर्ग विश्वविद्यालय में रॉबर्ट कोवाल्स्की की [[हॉर्न क्लॉज]] की प्रक्रियात्मक व्याख्या के आधार पर, 1972 में [[एलेन कॉलमेरॉयर]] द्वारा फिलिप रसेल के साथ मार्सिले, फ्रांस में भाषा विकसित और कार्यान्वित की गई थी।<ref name="Kowalski">{{Cite journal| doi = 10.1145/35043.35046 | last1 = Kowalski | first1 = R. A. | title = The early years of logic programming | journal = Communications of the ACM | volume = 31 | page = 38 | year = 1988 | s2cid = 12259230 |url=http://www.doc.ic.ac.uk/~rak/papers/the%20early%20years.pdf}}</ref><ref>{{Cite journal |  doi = 10.1145/155360.155362 | first2 = P.  | last1 = Colmerauer | first1 = A. | last2 = Roussel | title = The birth of Prolog | journal = ACM SIGPLAN Notices | volume = 28 |  issue = 3 | pages = 37 | year = 1993 |url=http://alain.colmerauer.free.fr/alcol/ArchivesPublications/PrologHistory/19november92.pdf}}</ref><ref>{{cite web |url=https://www.mta.ca/~rrosebru/oldcourse/371199/prolog/history.html |title=PROLOG:a brief history |access-date=21 November 2021}}</ref>
एडिनबर्ग विश्वविद्यालय में रॉबर्ट कोवाल्स्की की [[हॉर्न क्लॉज]] की प्रक्रियात्मक व्याख्या के आधार पर, 1972 में [[एलेन कॉलमेरॉयर]] द्वारा फिलिप रसेल के साथ मार्सिले, फ्रांस में भाषा विकसित और कार्यान्वित की गई थी।<ref name="Kowalski">{{Cite journal| doi = 10.1145/35043.35046 | last1 = Kowalski | first1 = R. A. | title = The early years of logic programming | journal = Communications of the ACM | volume = 31 | page = 38 | year = 1988 | s2cid = 12259230 |url=http://www.doc.ic.ac.uk/~rak/papers/the%20early%20years.pdf}}</ref><ref>{{Cite journal |  doi = 10.1145/155360.155362 | first2 = P.  | last1 = Colmerauer | first1 = A. | last2 = Roussel | title = The birth of Prolog | journal = ACM SIGPLAN Notices | volume = 28 |  issue = 3 | pages = 37 | year = 1993 |url=http://alain.colmerauer.free.fr/alcol/ArchivesPublications/PrologHistory/19november92.pdf}}</ref><ref>{{cite web |url=https://www.mta.ca/~rrosebru/oldcourse/371199/prolog/history.html |title=PROLOG:a brief history |access-date=21 November 2021}}</ref>
प्रोलॉग पहली लॉजिक प्रोग्रामिंग लैंग्वेज में से एक थी<ref>See {{section link|Logic programming|History}}.</ref> और आज भी इस तरह की सबसे लोकप्रिय भाषा बनी हुई है, जिसमें कई मुफ्त और व्यावसायिक कार्यान्वयन उपलब्ध हैं। स्वचालित प्रमेय साबित करने के लिए भाषा का उपयोग किया गया है,<ref>{{Cite journal | last1 = Stickel | first1 = M. E. | title = A prolog technology theorem prover: Implementation by an extended prolog compiler | journal = Journal of Automated Reasoning | volume = 4 | issue = 4 | pages = 353–380 | year = 1988 | doi = 10.1007/BF00297245| citeseerx = 10.1.1.47.3057 | s2cid = 14621218 }}</ref> विशेषज्ञ प्रणालियां,<ref>{{cite book |author=Merritt, Dennis |title=Building expert systems in Prolog |publisher=Springer-Verlag |location=Berlin |year=1989 |isbn=978-0-387-97016-5 |url-access=registration |url=https://archive.org/details/buildingexpertsy0000merr }}</ref> टर्म पुनर्लेखन,<ref>Felty, Amy. "A logic programming approach to implementing higher-order term rewriting." Extensions of Logic Programming (1992): 135-161.</ref> टाइप सिस्टम,<ref name="Lee2015">{{cite book|author=Kent D. Lee|title=Foundations of Programming Languages|url=https://books.google.com/books?id=dERFBgAAQBAJ&q=prolog+type+inference&pg=PA298|date=19 January 2015|publisher=Springer|isbn=978-3-319-13314-0|pages=298–}}</ref> और [[स्वचालित योजना]],<ref name="Schmid2003">{{cite book|author=Ute Schmid|title=Inductive Synthesis of Functional Programs: Universal Planning, Folding of Finite Programs, and Schema Abstraction by Analogical Reasoning|url=https://books.google.com/books?id=p-Fy25LE4lMC|date=21 August 2003|publisher=Springer Science & Business Media|isbn=978-3-540-40174-2}}</ref> साथ ही इसके उपयोग का मूल इरादा क्षेत्र, [[प्राकृतिक भाषा प्रसंस्करण]]<ref>{{cite book |author1=Fernando C. N. Pereira |author-link1=Fernando Pereira |author2=Stuart M. Shieber |year=2005 |title=Prolog and Natural Language Analysis |publisher=Microtome |url=http://mtome.com/Publications/PNLA/pnla.html}}</ref><ref name=lally>{{cite web |author1=Adam Lally |author2=Paul Fodor |date=31 March 2011 |url=http://www.cs.nmsu.edu/ALP/2011/03/natural-language-processing-with-prolog-in-the-ibm-watson-system/ |title=Natural Language Processing With Prolog in the IBM Watson System |publisher=Association for Logic Programming}} See also [[Watson (computer)]].</ref> आधुनिक प्रोलॉग वातावरण [[ग्राफिकल यूज़र इंटरफ़ेस]] के साथ-साथ प्रशासनिक और नेटवर्क अनुप्रयोगों के निर्माण का समर्थन करते हैं।
 
प्रोलॉग पहली लॉजिक प्रोग्रामिंग भाषा में से एक थी<ref>See {{section link|Logic programming|History}}.</ref> और आज भी इस प्रकार की सबसे लोकप्रिय भाषा बनी हुई है, जिसमें कई मुफ्त और व्यावसायिक कार्यान्वयन उपलब्ध हैं। स्वचालित प्रमेय सिद्ध करने के लिए भाषा का उपयोग<ref>{{Cite journal | last1 = Stickel | first1 = M. E. | title = A prolog technology theorem prover: Implementation by an extended prolog compiler | journal = Journal of Automated Reasoning | volume = 4 | issue = 4 | pages = 353–380 | year = 1988 | doi = 10.1007/BF00297245| citeseerx = 10.1.1.47.3057 | s2cid = 14621218 }}</ref> विशेषज्ञ प्रणालियां,<ref>{{cite book |author=Merritt, Dennis |title=Building expert systems in Prolog |publisher=Springer-Verlag |location=Berlin |year=1989 |isbn=978-0-387-97016-5 |url-access=registration |url=https://archive.org/details/buildingexpertsy0000merr }}</ref> टर्म पुनर्लेखन,<ref>Felty, Amy. "A logic programming approach to implementing higher-order term rewriting." Extensions of Logic Programming (1992): 135-161.</ref> टाइप प्रणाली,<ref name="Lee2015">{{cite book|author=Kent D. Lee|title=Foundations of Programming Languages|url=https://books.google.com/books?id=dERFBgAAQBAJ&q=prolog+type+inference&pg=PA298|date=19 January 2015|publisher=Springer|isbn=978-3-319-13314-0|pages=298–}}</ref> और [[स्वचालित योजना]],<ref name="Schmid2003">{{cite book|author=Ute Schmid|title=Inductive Synthesis of Functional Programs: Universal Planning, Folding of Finite Programs, and Schema Abstraction by Analogical Reasoning|url=https://books.google.com/books?id=p-Fy25LE4lMC|date=21 August 2003|publisher=Springer Science & Business Media|isbn=978-3-540-40174-2}}</ref> साथ ही इसके उपयोग का मूल प्रयोजन क्षेत्र, [[प्राकृतिक भाषा प्रसंस्करण]] में किया गया है।<ref>{{cite book |author1=Fernando C. N. Pereira |author-link1=Fernando Pereira |author2=Stuart M. Shieber |year=2005 |title=Prolog and Natural Language Analysis |publisher=Microtome |url=http://mtome.com/Publications/PNLA/pnla.html}}</ref><ref name="lally">{{cite web |author1=Adam Lally |author2=Paul Fodor |date=31 March 2011 |url=http://www.cs.nmsu.edu/ALP/2011/03/natural-language-processing-with-prolog-in-the-ibm-watson-system/ |title=Natural Language Processing With Prolog in the IBM Watson System |publisher=Association for Logic Programming}} See also [[Watson (computer)]].</ref> आधुनिक प्रोलॉग वातावरण [[ग्राफिकल यूज़र इंटरफ़ेस]] के साथ-साथ प्रशासनिक और नेटवर्क अनुप्रयोगों के निर्माण का समर्थन करते हैं।


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


== सिंटेक्स और शब्दार्थ ==
== वाक्य-विन्यास और शब्दार्थ ==
{{Main|Prolog syntax and semantics}}
{{Main|प्रोलॉग वाक्य-विन्यास और शब्दार्थ}}
प्रोलॉग में, प्रोग्राम लॉजिक संबंधों के संदर्भ में व्यक्त किया जाता है, और इन संबंधों पर एक क्वेरी चलाकर एक संगणना शुरू की जाती है। प्रोलॉग के एकल डेटा प्रकार, शब्द का उपयोग करके संबंधों और प्रश्नों का निर्माण किया जाता है।<ref name=lloyd84>{{cite book |author=Lloyd, J. W. |title=Foundations of logic programming |publisher=Springer-Verlag |location=Berlin |year=1984 |isbn=978-3-540-13299-8 }}</ref> संबंधों को खंडों द्वारा परिभाषित किया गया है। एक प्रश्न को देखते हुए, प्रोलॉग इंजन अस्वीकृत क्वेरी के संकल्प (तर्क) खंडन को खोजने का प्रयास करता है। यदि अस्वीकृत क्वेरी का खंडन किया जा सकता है, अर्थात, सभी मुक्त चर के लिए एक इंस्टेंटेशन पाया जाता है, जो क्लॉज़ का मिलन करता है और सिंगलटन सेट में नकारात्मक क्वेरी को गलत बनाता है, यह इस प्रकार है कि मूल क्वेरी, लागू किए गए इंस्टेंटेशन के साथ, एक है कार्यक्रम का [[तार्किक परिणाम]]यह प्रोलॉग (और अन्य लॉजिक प्रोग्रामिंग लैंग्वेज) को विशेष रूप से डेटाबेस, प्रतीकात्मक गणित और भाषा पार्सिंग अनुप्रयोगों के लिए उपयोगी बनाता है। क्योंकि प्रोलॉग अशुद्ध विधेय (गणितीय तर्क) की अनुमति देता है, कुछ विशेष विधेय के सत्य मान की जाँच करने से कुछ जानबूझकर दुष्प्रभाव (कंप्यूटर विज्ञान) हो सकते हैं, जैसे कि स्क्रीन पर मूल्य प्रिंट करना। इस वजह से, तार्किक प्रतिमान असुविधाजनक होने पर प्रोग्रामर को कुछ मात्रा में पारंपरिक [[अनिवार्य प्रोग्रामिंग]] का उपयोग करने की अनुमति है। इसका विशुद्ध रूप से तार्किक उपसमुच्चय है, जिसे शुद्ध प्रोलॉग कहा जाता है, साथ ही साथ कई अतिरिक्त विशेषताएं भी हैं।
 
प्रोलॉग में, प्रोग्राम लॉजिक संबंधों के संदर्भ में व्यक्त किया जाता है, और इन संबंधों पर एक क्वेरी चलाकर एक संगणना प्रारंभ की जाती है। प्रोलॉग के एकल डेटा प्रकार, शब्द का उपयोग करके संबंधों और प्रश्नों का निर्माण किया जाता है।<ref name=lloyd84>{{cite book |author=Lloyd, J. W. |title=Foundations of logic programming |publisher=Springer-Verlag |location=Berlin |year=1984 |isbn=978-3-540-13299-8 }}</ref> संबंधों को खंडों द्वारा परिभाषित किया गया है। एक प्रश्न को देखते हुए, प्रोलॉग इंजन अस्वीकृत क्वेरी के संकल्प (तर्क) खंडन को ढूंढने का प्रयास करता है। यदि अस्वीकृत क्वेरी का खंडन किया जा सकता है, अर्थात, सभी मुक्त चर के लिए एक इंस्टेंटेशन पाया जाता है, जो क्लॉज़ का मिलन करता है और सिंगलटन सेट में नकारात्मक क्वेरी को अनुचित बनाता है, यह इस प्रकार है कि मूल क्वेरी, प्रयुक्त तात्कालिकता के साथ, कार्यक्रम का एक [[तार्किक परिणाम]] है। यह प्रोलॉग (और अन्य लॉजिक प्रोग्रामिंग भाषा) को विशेष रूप से डेटाबेस, प्रतीकात्मक गणित और भाषा पार्सिंग अनुप्रयोगों के लिए उपयोगी बनाता है। क्योंकि प्रोलॉग अशुद्ध विधेय (गणितीय तर्क) की अनुमति देता है, कुछ विशेष विधेय के सत्य मान की जाँच करने से कुछ सविचार दुष्प्रभाव जैसे कि स्क्रीन पर मूल्य प्रिंट करना हो सकते हैं। इस कारण से, तार्किक प्रतिमान असुविधाजनक होने पर प्रोग्रामर को कुछ मात्रा में पारंपरिक [[अनिवार्य प्रोग्रामिंग]] का उपयोग करने की अनुमति है। इसका विशुद्ध रूप से तार्किक उपसमुच्चय है, जिसे शुद्ध प्रोलॉग कहा जाता है, साथ ही साथ कई अतिरिक्त विशेषताएं भी हैं।


=== [[डेटा प्रकार]] ===
=== [[डेटा प्रकार]] ===
प्रोलॉग का एकल डेटा प्रकार शब्द है। शर्तें या तो प्रतीक (प्रोग्रामिंग) हैं, संख्याएं, चर या यौगिक शब्द हैं।
प्रोलॉग का एकल डेटा प्रकार शब्द है। नियम या तो परमाणु, संख्याएं, चर या यौगिक शब्द हैं।


* एक 'परमाणु' एक सामान्य उद्देश्य वाला नाम है जिसका कोई अंतर्निहित अर्थ नहीं है। परमाणुओं के उदाहरणों में शामिल हैं <code>x</code>, <code>red</code>, <code>'Taco'</code>, और <code>'some atom'</code>.
* एक 'परमाणु' एक सामान्य उद्देश्य वाला नाम है जिसका कोई अंतर्निहित अर्थ नहीं है। परमाणुओं के उदाहरणों में <code>x</code>, <code>red</code>, <code>'Taco'</code>, और <code>'some atom'</code> सम्मिलित हैं।
* संख्याएँ [[फ़्लोटिंग-पॉइंट अंकगणित]]ीय या [[पूर्णांक]] हो सकती हैं। आईएसओ मानक संगत प्रोलॉग सिस्टम प्रोलॉग फ्लैग बाउंड की जांच कर सकते हैं। अधिकांश प्रमुख प्रोलॉग सिस्टम मनमाना लंबाई पूर्णांक संख्याओं का समर्थन करते हैं।
* संख्याएँ [[फ़्लोटिंग-पॉइंट अंकगणित]] या [[पूर्णांक]] हो सकती हैं। आईएसओ मानक संगत प्रोलॉग प्रणाली प्रोलॉग फ्लैग बाउंड की जांच कर सकते हैं। अधिकांश प्रमुख प्रोलॉग प्रणाली इच्छानुसार लंबाई पूर्णांक संख्याओं का समर्थन करते हैं।
* वेरिएबल्स को अक्षरों, संख्याओं और अंडरस्कोर वर्णों वाली एक स्ट्रिंग द्वारा दर्शाया जाता है, और एक अपर-केस अक्षर या अंडरस्कोर से शुरू होता है। वेरिएबल्स लॉजिक में वेरिएबल्स के समान हैं, जिसमें वे मनमाने शब्दों के लिए प्लेसहोल्डर हैं।
* वेरिएबल्स को अक्षरों, संख्याओं और अंडरस्कोर वर्णों वाली एक स्ट्रिंग द्वारा दर्शाया जाता है, और एक अपर-केस अक्षर या अंडरस्कोर से प्रारंभ होता है। वेरिएबल्स लॉजिक में वेरिएबल्स के समान हैं, जिसमें वे इच्छानुसार शब्दों के लिए प्लेसहोल्डर हैं।
* एक मिश्रित शब्द एक परमाणु से बना होता है जिसे फ़ंक्टर कहा जाता है और कई तर्क होते हैं, जो फिर से शब्द होते हैं। यौगिक शब्दों को आमतौर पर एक फ़ैक्टर के रूप में लिखा जाता है, जिसके बाद तर्क शब्दों की अल्पविराम से अलग की गई सूची होती है, जो कोष्ठकों में निहित होती है। तर्कों की संख्या को शब्द की योग्यता कहा जाता है। एक परमाणु को शून्यता के साथ एक यौगिक शब्द के रूप में माना जा सकता है। यौगिक पद का उदाहरण है <code>person_friends(zelda,[tom,jim])</code>.
* एक मिश्रित शब्द एक परमाणु से बना होता है जिसे फ़ंक्टर कहा जाता है और कई तर्क होते हैं, जो फिर से शब्द होते हैं। यौगिक शब्दों को सामान्यतः एक कारक के रूप में लिखा जाता है, जिसके बाद तर्क शब्दों की अल्पविराम से अलग की गई सूची होती है, जो कोष्ठकों में निहित होती है। तर्कों की संख्या को शब्द की योग्यता कहा जाता है। एक परमाणु को शून्यता के साथ एक यौगिक शब्द के रूप में माना जा सकता है। <code>person_friends(zelda,[tom,jim])</code> , यौगिक पद का उदाहरण है।


यौगिक शब्दों के विशेष मामले:
यौगिक शब्दों की विशेष स्थिति:


* एक सूची शब्दों का एक क्रमबद्ध संग्रह है। इसे वर्गाकार कोष्ठकों द्वारा अल्पविराम से अलग किए गए शब्दों के साथ या खाली सूची के मामले में, द्वारा निरूपित किया जाता है <code>[]</code>. उदाहरण के लिए, <code>[1,2,3]</code> या <code>[red,green,blue]</code>.
* एक सूची शब्दों का एक क्रमबद्ध संग्रह है। इसे वर्गाकार कोष्ठकों द्वारा अल्पविराम से अलग किए गए शब्दों के साथ या खाली सूची की स्थिति में, <code>[]</code> द्वारा निरूपित किया जाता है। उदाहरण के लिए, <code>[1,2,3]</code> या <code>[red,green,blue]</code>
* स्ट्रिंग्स: उद्धरणों से घिरे वर्णों का अनुक्रम या तो (संख्यात्मक) वर्ण कोडों की सूची, वर्णों की सूची (लंबाई 1 के परमाणु), या प्रोलॉग ध्वज के मान के आधार पर एक परमाणु के बराबर है <code>double_quotes</code>. उदाहरण के लिए, <code>"to be, or not to be"</code>.<ref name="ISO 13211-1 6.3.7">ISO/IEC 13211-1:1995 Prolog, 6.3.7 Terms - double quoted list notation. [[International Organization for Standardization]], Geneva.</ref>
* स्ट्रिंग्स: उद्धरणों से घिरे वर्णों का अनुक्रम या तो (संख्यात्मक) वर्ण कोडों की सूची, वर्णों की सूची (लंबाई 1 के परमाणु), या प्रोलॉग फ्लैग के <code>double_quotes</code> मान के आधार पर एक परमाणु के बराबर है।उदाहरण के लिए, <code>"to be, or not to be"</code>.<ref name="ISO 13211-1 6.3.7">ISO/IEC 13211-1:1995 Prolog, 6.3.7 Terms - double quoted list notation. [[International Organization for Standardization]], Geneva.</ref>
[[आईएसओ प्रोलॉग]] प्रदान करता है <code>atom/1</code>, <code>number/1</code>, <code>integer/1</code>, और <code>float/1</code> टाइप-चेकिंग के लिए भविष्यवाणी करता है।<ref>{{cite web| url = http://www.swi-prolog.org/pldoc/man?section=typetest| title = Verify Type of a Term - SWI-Prolog}}</ref>
[[आईएसओ प्रोलॉग]] टाइप-चेकिंग के लिए '''प्रदान करता है''' <code>atom/1</code>, <code>number/1</code>, <code>integer/1</code>, और <code>float/1</code> विधेय प्रदान करता है।<ref>{{cite web| url = http://www.swi-prolog.org/pldoc/man?section=typetest| title = Verify Type of a Term - SWI-Prolog}}</ref>




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


<syntaxhighlight lang= prolog>Head :- Body.</syntaxhighlight>
<syntaxhighlight lang= prolog>Head :- Body.</syntaxhighlight>


और हेड इज़ ट्रू के रूप में पढ़ा जाता है यदि बॉडी ट्रू है। नियम के मुख्य भाग में विधेय के लिए कॉल होते हैं, जिन्हें नियम का लक्ष्य कहा जाता है। अंतर्निहित [[तार्किक ऑपरेटर]] <code>,/2</code> (अर्थात् एक धर्मार्थ 2 [[ऑपरेटर (प्रोग्रामिंग)]] नाम के साथ <code>,</code>) लक्ष्यों के [[तार्किक संयोजन]] को दर्शाता है, और <code>;/2</code> तार्किक संयोजन को दर्शाता है। संयोजन और वियोग केवल शरीर में प्रकट हो सकते हैं, किसी नियम के शीर्ष में नहीं।
और हेड इज़ सही के रूप में पढ़ा जाता है यदि बॉडी सही है। नियम के मुख्य भाग में विधेय के लिए कॉल होते हैं, जिन्हें नियम का लक्ष्य कहा जाता है। अंतर्निहित [[तार्किक ऑपरेटर]] <code>,/2</code> (अर्थात् एक धर्मार्थ 2 [[ऑपरेटर (प्रोग्रामिंग)]] नाम के साथ <code>,</code>) लक्ष्यों के [[तार्किक संयोजन]] को दर्शाता है, और <code>;/2</code> तार्किक संयोजन को दर्शाता है। संयोजन और वियोग केवल शरीर में प्रकट हो सकते हैं, किसी नियम के शीर्ष में नहीं प्रकट हो सकते हैं।


खाली शरीर वाले खंडों को तथ्य कहा जाता है। एक तथ्य का उदाहरण है:
खाली शरीर वाले खंडों को तथ्य कहा जाता है। एक तथ्य का उदाहरण है:
Line 58: Line 61:
<syntaxhighlight lang= prolog >cat(tom) :- true.</syntaxhighlight>
<syntaxhighlight lang= prolog >cat(tom) :- true.</syntaxhighlight>


अंतर्निहित विधेय <code>true/0</code> हमेशा सच होता है।
अंतर्निहित विधेय <code>true/0</code> सदैव सच होता है।


उपरोक्त तथ्य को देखते हुए, कोई पूछ सकता है:
उपरोक्त तथ्य को देखते हुए, कोई पूछ सकता है:
'''क्या टॉम बिल्ली है?'''
'''<वाक्यविन्यास लैंग = प्रोलॉग>'''
'''</वाक्यविन्यास हाइलाइट>'''


क्या टॉम बिल्ली है?
क्या टॉम बिल्ली है?
?- cat(tom).


<वाक्यविन्यास लैंग = प्रोलॉग>
  Yes
? - बिल्ली (टॉम)।
हाँ
</वाक्यविन्यास हाइलाइट>
 
बिल्लियाँ क्या हैं?
बिल्लियाँ क्या हैं?
  ?- cat(X).


<वाक्यविन्यास लैंग = प्रोलॉग>
  X = tom
?-बिल्ली(एक्स).
'''</वाक्यविन्यास हाइलाइट>'''
एक्स = टॉम
</वाक्यविन्यास हाइलाइट>


निकायों वाले खंड 'नियम' कहलाते हैं। नियम का एक उदाहरण है:
निकायों वाले खंड 'नियम' कहलाते हैं। नियम का एक उदाहरण है:
Line 80: Line 86:
<syntaxhighlight lang= prolog>animal(X) :- cat(X).</syntaxhighlight>
<syntaxhighlight lang= prolog>animal(X) :- cat(X).</syntaxhighlight>


अगर हम उस नियम को जोड़ दें और पूछें कि जानवर क्या चीजें हैं?
यदि हम उस नियम को जोड़ दें और पूछें कि जानवर क्या चीजें हैं?


<वाक्यविन्यास लैंग = प्रोलॉग>
'''<वाक्यविन्यास लैंग = प्रोलॉग>'''
  ?- पशु(एक्स).
  ?- animal(X).
  एक्स = टॉम
  X = tom
</वाक्यविन्यास हाइलाइट>
'''</वाक्यविन्यास हाइलाइट>'''


कई अंतर्निहित विधेय की संबंधपरक प्रकृति के कारण, वे आमतौर पर कई दिशाओं में उपयोग किए जा सकते हैं। उदाहरण के लिए, <code>length/2</code> सूची की लंबाई निर्धारित करने के लिए इस्तेमाल किया जा सकता है (<code>length(List, L)</code>, एक सूची दी <code>List</code>) साथ ही दी गई लंबाई की एक सूची कंकाल उत्पन्न करने के लिए (<code>length(X, 5)</code>), और दोनों सूची कंकाल और उनकी लंबाई एक साथ उत्पन्न करने के लिए (<code>length(X, L)</code>). इसी प्रकार, <code>append/3</code> दो सूचियों को जोड़ने के लिए दोनों का उपयोग किया जा सकता है (<code>append(ListA, ListB, X)</code> दी गई सूचियाँ <code>ListA</code> और <code>ListB</code>) साथ ही दी गई सूची को भागों में विभाजित करने के लिए (<code>append(X, Y, List)</code>, एक सूची दी <code>List</code>). इस कारण से, पुस्तकालय का तुलनात्मक रूप से छोटा सेट कई प्रोलॉग कार्यक्रमों के लिए पर्याप्त है।
कई अंतर्निहित विधेय की संबंधपरक प्रकृति के कारण, वे सामान्यतः कई दिशाओं में उपयोग किए जा सकते हैं। उदाहरण के लिए, <code>length/2</code> सूची की लंबाई निर्धारित करने के लिए उपयोग किया जा सकता है (<code>length(List, L)</code>, दी हुई सूची <code>List</code>) साथ ही दी गई लंबाई की एक सूची कंकाल उत्पन्न करने के लिए (<code>length(X, 5)</code>), और दोनों सूची कंकाल और उनकी लंबाई एक साथ उत्पन्न करने के लिए (<code>length(X, L)</code>)इसी प्रकार, <code>append/3</code> दो सूचियों को जोड़ने के लिए उपयोग किया जा सकता है, (<code>append(ListA, ListB, X)</code> दी गई सूचियाँ <code>ListA</code> और <code>ListB</code> साथ ही साथ दी गई सूची को भागों में विभाजित करने के लिए (<code>append(X, Y, List)</code>, दी गयी सूची <code>List</code> के लियें उपयोग किया जा सकता है। इस कारण से, पुस्तकालय का तुलनात्मक रूप से छोटा सेट कई प्रोलॉग कार्यक्रमों के लिए पर्याप्त है।


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


=== निष्पादन ===
=== निष्पादन ===
एक प्रोलॉग प्रोग्राम का निष्पादन उपयोगकर्ता द्वारा एकल लक्ष्य की पोस्टिंग द्वारा शुरू किया जाता है, जिसे क्वेरी कहा जाता है। तार्किक रूप से, प्रोलॉग इंजन अस्वीकृत क्वेरी के संकल्प (तर्क) खंडन को खोजने का प्रयास करता है। प्रोलॉग द्वारा उपयोग की जाने वाली रिज़ॉल्यूशन विधि को एसएलडी रिज़ॉल्यूशन कहा जाता है। यदि अस्वीकृत क्वेरी का खंडन किया जा सकता है, तो यह इस प्रकार है कि क्वेरी, उपयुक्त चर बाइंडिंग के साथ, कार्यक्रम का एक तार्किक परिणाम है। उस स्थिति में, सभी जेनरेट किए गए चर बाइंडिंग उपयोगकर्ता को रिपोर्ट किए जाते हैं, और कहा जाता है कि क्वेरी सफल हो गई है। क्रियात्मक रूप से, प्रोलॉग की निष्पादन रणनीति को अन्य भाषाओं में फ़ंक्शन कॉल के सामान्यीकरण के रूप में माना जा सकता है, एक अंतर यह है कि एकाधिक खंड शीर्ष किसी दिए गए कॉल से मेल खा सकते हैं। उस स्थिति में, सिस्टम पहले विकल्प के क्लॉज हेड के साथ एक विकल्प-बिंदु, एकीकरण (कंप्यूटर विज्ञान) लक्ष्य बनाता है, और उस पहले विकल्प के लक्ष्यों के साथ जारी रहता है। यदि प्रोग्राम को निष्पादित करने के दौरान कोई भी लक्ष्य विफल हो जाता है, तो सबसे हालिया पसंद-बिंदु बनाए जाने के बाद से किए गए सभी परिवर्तनीय बंधन पूर्ववत हो जाते हैं, और निष्पादन उस पसंद-बिंदु के अगले विकल्प के साथ जारी रहता है। इस निष्पादन रणनीति को कालानुक्रमिक [[बैक ट्रैकिंग]] कहा जाता है। उदाहरण के लिए:
एक प्रोलॉग प्रोग्राम का निष्पादन उपयोगकर्ता द्वारा एकल लक्ष्य की पोस्टिंग द्वारा प्रारंभ किया जाता है, जिसे क्वेरी कहा जाता है। तार्किक रूप से, प्रोलॉग इंजन अस्वीकृत क्वेरी के संकल्प (तर्क) खंडन को ढूंढने का प्रयास करता है। प्रोलॉग द्वारा उपयोग की जाने वाली रिज़ॉल्यूशन विधि को एसएलडी रिज़ॉल्यूशन कहा जाता है। यदि अस्वीकृत क्वेरी का खंडन किया जा सकता है, तो यह इस प्रकार है कि क्वेरी, उपयुक्त चर बाइंडिंग के साथ, कार्यक्रम का एक तार्किक परिणाम है। उस स्थिति में, सभी जेनरेट किए गए चर बाइंडिंग उपयोगकर्ता को सूचित किए जाते हैं, और कहा जाता है कि क्वेरी सफल हो गई है। क्रियात्मक रूप से, प्रोलॉग की निष्पादन रणनीति को अन्य भाषाओं में फलन कॉल के सामान्यीकरण के रूप में माना जा सकता है, एक अंतर यह है कि एकाधिक खंड शीर्ष किसी दिए गए कॉल से मेल खा सकते हैं। उस स्थिति में, प्रणाली पहले विकल्प के क्लॉज हेड के साथ एक विकल्प-बिंदु, एकीकरण लक्ष्य बनाता है, और उस पहले विकल्प के लक्ष्यों के साथ जारी रहता है। यदि प्रोग्राम को निष्पादित करने के समय कोई भी लक्ष्य विफल हो जाता है, तो सबसे आधुनिक पसंद-बिंदु बनाए जाने के बाद से किए गए सभी परिवर्तनीय बंधन पूर्ववत हो जाते हैं, और निष्पादन उस पसंद-बिंदु के अगले विकल्प के साथ जारी रहता है। इस निष्पादन रणनीति को कालानुक्रमिक [[बैक ट्रैकिंग]] कहा जाता है। उदाहरण के लिए:
 
<वाक्यविन्यास लैंग = प्रोलॉग>
<वाक्यविन्यास लैंग = प्रोलॉग>
मां_चाइल्ड (असभ्य, सैली)।
मां_चाइल्ड (असभ्य, सैली)।
   
   
पिता_चाइल्ड (टॉम, सैली)।
पिता_चाइल्ड (टॉम, सैली)।
पिता_चाइल्ड (टॉम, एरिका)।
पिता_चाइल्ड (टॉम, एरिका)।
पिता_चाइल्ड (माइक, टॉम)।
पिता_चाइल्ड (माइक, टॉम)।
   
   
Line 103: Line 113:
   
   
माता-पिता_चाइल्ड (एक्स, वाई): - पिता_चाइल्ड (एक्स, वाई)।
माता-पिता_चाइल्ड (एक्स, वाई): - पिता_चाइल्ड (एक्स, वाई)।
पेरेंट_चाइल्ड (एक्स, वाई): - मदर_चाइल्ड (एक्स, वाई)।
पेरेंट_चाइल्ड (एक्स, वाई): - मदर_चाइल्ड (एक्स, वाई)।
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


Line 109: Line 121:


<वाक्यविन्यास लैंग = प्रोलॉग>
<वाक्यविन्यास लैंग = प्रोलॉग>
  ?- सहोदर (सैली, एरिका)
mother_child(trude, sally).
  हाँ
 
</वाक्यविन्यास हाइलाइट>
father_child(tom, sally).
father_child(tom, erica).
father_child(mike, tom).
 
sibling(X, Y)      :- parent_child(Z, X), parent_child(Z, Y).
 
parent_child(X, Y) :- father_child(X, Y).
 
parent_child(X, Y) :- mother_child(X, Y).
 
इसके परिणामस्वरूप निम्न क्वेरी का मूल्यांकन सत्य के रूप में किया जा रहा है:
 
  ?- sibling(sally, erica).
 
  Yes
 
 
'''</वाक्यविन्यास हाइलाइट>'''


इसे निम्नानुसार प्राप्त किया जाता है: प्रारंभ में, क्वेरी के लिए केवल मिलान करने वाला क्लॉज-हेड <code>sibling(sally, erica)</code> पहला है, इसलिए क्वेरी को साबित करना उस खंड के शरीर को उचित चर बाइंडिंग के साथ साबित करने के बराबर है, यानी संयोजन <code>(parent_child(Z,sally), parent_child(Z,erica))</code>. सिद्ध किया जाने वाला अगला लक्ष्य इस संयोजन का सबसे बायाँ लक्ष्य है, अर्थात, <code>parent_child(Z, sally)</code>. दो खंड शीर्ष इस लक्ष्य से मेल खाते हैं। सिस्टम एक विकल्प-बिंदु बनाता है और पहले विकल्प की कोशिश करता है, जिसका शरीर है <code>father_child(Z, sally)</code>. तथ्य का उपयोग करके इस लक्ष्य को सिद्ध किया जा सकता है <code>father_child(tom, sally)</code>, इसलिए बंधन <code>Z = tom</code> उत्पन्न होता है, और सिद्ध किया जाने वाला अगला लक्ष्य उपरोक्त संयोजन का दूसरा भाग है: <code>parent_child(tom, erica)</code>. फिर से, यह इसी तथ्य से सिद्ध किया जा सकता है। चूंकि सभी लक्ष्यों को सिद्ध किया जा सकता है, क्वेरी सफल होती है। चूंकि क्वेरी में कोई चर नहीं है, इसलिए उपयोगकर्ता को कोई बंधन नहीं बताया गया है। चर के साथ एक क्वेरी, जैसे:
इसे निम्नानुसार प्राप्त किया जाता है: प्रारंभ में, क्वेरी के लिए केवल मिलान करने वाला क्लॉज-हेड <code>sibling(sally, erica)</code> पहला है, इसलिए क्वेरी को सिद्ध करना उस खंड के शरीर को उचित चर बाइंडिंग के साथ सिद्ध करने के बराबर है, अर्थात् संयोजन <code>(parent_child(Z,sally), parent_child(Z,erica))</code> है। सिद्ध किया जाने वाला अगला लक्ष्य इस संयोजन का सबसे बायाँ लक्ष्य है, अर्थात, <code>parent_child(Z, sally)</code> है। दो खंड शीर्ष इस लक्ष्य से मेल खाते हैं। प्रणाली एक विकल्प-बिंदु बनाता है और पहले विकल्प की प्रयास करता है, जिसका शरीर <code>father_child(Z, sally)</code> है। तथ्य का उपयोग करके <code>father_child(tom, sally)</code> लक्ष्य को सिद्ध किया जा सकता है, इसलिए बंधन <code>Z = tom</code> उत्पन्न होता है, और सिद्ध किया जाने वाला अगला लक्ष्य उपरोक्त संयोजन का दूसरा भाग <code>parent_child(tom, erica)</code> है। फिर से, यह इसी तथ्य से सिद्ध किया जा सकता है। चूंकि सभी लक्ष्यों को सिद्ध किया जा सकता है, क्वेरी सफल होती है। चूंकि क्वेरी में कोई चर नहीं है, इसलिए उपयोगकर्ता को कोई बंधन नहीं बताया गया है। चर के साथ एक क्वेरी, जैसे:


<syntaxhighlight lang= prolog >?- father_child(Father, Child).</syntaxhighlight>
<syntaxhighlight lang= prolog >?- father_child(Father, Child).</syntaxhighlight>
Line 119: Line 148:
बैकट्रैकिंग पर सभी मान्य उत्तरों की गणना करता है।
बैकट्रैकिंग पर सभी मान्य उत्तरों की गणना करता है।


ध्यान दें कि ऊपर बताए गए कोड के साथ, query <code>?- sibling(sally, sally).</code> भी सफल होता है। यदि वांछित हो, तो प्रासंगिक प्रतिबंधों का वर्णन करने के लिए अतिरिक्त लक्ष्य सम्मिलित होंगे।
ध्यान दें कि ऊपर बताए गए कोड के साथ, क्वेरी <code>?- sibling(sally, sally).</code> भी सफल होता है। यदि वांछित हो, तो प्रासंगिक प्रतिबंधों का वर्णन करने के लिए अतिरिक्त लक्ष्य सम्मिलित होंगे।


=== लूप और रिकर्सन ===
=== लूप और प्रत्यावर्तन ===
पुनरावर्ती विधेय के माध्यम से इटरेटिव एल्गोरिदम को लागू किया जा सकता है।<ref>{{cite book|url=https://books.google.com/books?id=dZimAwAAQBAJ&q=prolog%20failure%20driven%20loop%20%22iteration%22&pg=PA148|title=SICStus Prolog User's Manual 4.3: Core reference documentation|first=Mats|last=Carlsson|date=27 May 2014|publisher=BoD – Books on Demand|via=Google Books|isbn=9783735737441}}</ref>
पुनरावर्ती विधेय के माध्यम से पुनरावर्ती कलनविधि को प्रयुक्त किया जा सकता है।<ref>{{cite book|url=https://books.google.com/books?id=dZimAwAAQBAJ&q=prolog%20failure%20driven%20loop%20%22iteration%22&pg=PA148|title=SICStus Prolog User's Manual 4.3: Core reference documentation|first=Mats|last=Carlsson|date=27 May 2014|publisher=BoD – Books on Demand|via=Google Books|isbn=9783735737441}}</ref>




=== नकार ===
=== निषेध ===
बिल्ट-इन प्रोलॉग विधेय <code>\+/1</code> विफलता के रूप में निषेध प्रदान करता है, जो [[गैर-मोनोटोनिक तर्क]] | गैर-मोनोटोनिक तर्क के लिए अनुमति देता है। लक्ष्य <code>\+ illegal(X)</code> नियम में
बिल्ट-इन प्रोलॉग विधेय <code>\+/1</code> विफलता के रूप में निषेध प्रदान करता है, जो [[गैर-मोनोटोनिक तर्क]] के लिए अनुमति देता है। लक्ष्य <code>\+ illegal(X)</code> नियम में


<syntaxhighlight lang= prolog>legal(X) :- \+ अवैध(X).</syntaxhighlight>
<syntaxhighlight lang="prolog">legal(X) :- \+ illegal(X).</syntaxhighlight>


निम्नानुसार मूल्यांकन किया जाता है: प्रोलॉग साबित करने का प्रयास करता है <code>illegal(X)</code>. यदि उस लक्ष्य के लिए कोई प्रमाण मिल सकता है, तो मूल लक्ष्य (अर्थात, <code>\+ illegal(X)</code>) विफल रहता है। यदि कोई प्रमाण नहीं मिल पाता है, तो मूल लक्ष्य सफल हो जाता है। इसलिए <code>\+/1</code> क्वेरी के बाद से उपसर्ग ऑपरेटर को साबित करने योग्य ऑपरेटर नहीं कहा जाता है <code>?- \+ Goal.</code> लक्ष्य सिद्ध नहीं होने पर सफल होता है। इस प्रकार का निषेध ध्वनि है यदि इसका तर्क ग्राउंड एक्सप्रेशन है जमीन (यानी कोई चर नहीं है)यदि तर्क में चर हैं और प्रमाण प्रक्रिया पूरी हो गई है तो ध्वनि खो जाती है। विशेष रूप से, क्वेरी <code>?- legal(X).</code> now का उपयोग उन सभी चीजों की गणना करने के लिए नहीं किया जा सकता है जो कानूनी हैं।
निम्नानुसार मूल्यांकन किया जाता है: प्रोलॉग <code>illegal(X)</code> सिद्ध करने का प्रयास करता है। यदि उस लक्ष्य के लिए कोई प्रमाण मिल सकता है, तो मूल लक्ष्य (अर्थात, <code>\+ illegal(X)</code>) विफल रहता है। यदि कोई प्रमाण नहीं मिल पाता है, तो मूल लक्ष्य सफल हो जाता है। इसलिए <code>\+/1</code> क्वेरी के बाद से उपसर्ग ऑपरेटर को सिद्ध करने योग्य ऑपरेटर नहीं कहा जाता है <code>?- \+ Goal.</code> लक्ष्य सिद्ध नहीं होने पर सफल होता है। इस प्रकार का निषेध ध्वनि है यदि इसका तर्क ग्राउंड एक्सप्रेशन (अर्थात् कोई चर नहीं) है। यदि तर्क में चर हैं और प्रमाण प्रक्रिया पूरी हो गई है तो ध्वनि खो जाती है। विशेष रूप से, क्वेरी <code>?- legal(X).</code> अब नियमबद्ध चीजों की गणना करने के लिए उपयोग नहीं किया जा सकता है।


== प्रोलॉग में प्रोग्रामिंग ==
== प्रोलॉग में प्रोग्रामिंग ==
Line 138: Line 167:
=== हैलो वर्ल्ड ===
=== हैलो वर्ल्ड ===
क्वेरी का एक उदाहरण:
क्वेरी का एक उदाहरण:
<वाक्यविन्यास लैंग = प्रोलॉग>
?- write('Hello World!'), nl.
?- लिखें ('हैलो वर्ल्ड!'), एनएल।
हैलो वर्ल्ड!
सत्य।


?-
Hello World!
</वाक्यविन्यास हाइलाइट>
true.
?-


=== संकलक अनुकूलन ===
=== संकलक अनुकूलन ===
राज्य संक्रमण के अनुक्रम के रूप में किसी भी गणना को घोषणात्मक रूप से व्यक्त किया जा सकता है। एक उदाहरण के रूप में, तीन ऑप्टिमाइज़ेशन पास वाले एक [[अनुकूलन संकलक]] को प्रारंभिक प्रोग्राम और उसके अनुकूलित रूप के बीच संबंध के रूप में कार्यान्वित किया जा सकता है:
राज्य संक्रमण के अनुक्रम के रूप में किसी भी गणना को घोषणात्मक रूप से व्यक्त किया जा सकता है। एक उदाहरण के रूप में, तीन ऑप्टिमाइज़ेशन पास वाले एक [[अनुकूलन संकलक]] को प्रारंभिक प्रोग्राम और उसके अनुकूलित रूप के बीच संबंध के रूप में कार्यान्वित किया जा सकता है:


<वाक्यविन्यास लैंग = प्रोलॉग>
'''<वाक्यविन्यास लैंग = प्रोलॉग>
प्रोग्राम_ऑप्टिमाइज्ड (प्रोग0, प्रोग) :-
प्रोग्राम_ऑप्टिमाइज्ड (प्रोग0, प्रोग) :-'''
     अनुकूलन_पास_1(प्रोग0, प्रोग1),
     program_optimized(Prog0, Prog) :-
    ऑप्टिमाइज़ेशन_पास_2(प्रोग1, प्रोग2),
 
    अनुकूलन_पास_3 (प्रोग 2, प्रोग)
    optimization_pass_1(Prog0, Prog1),
</वाक्यविन्यास हाइलाइट>
    optimization_pass_2(Prog1, Prog2),
 
    optimization_pass_3(Prog2, Prog).
'''</वाक्यविन्यास हाइलाइट>'''


या समान रूप से [[निश्चित खंड व्याकरण]] संकेतन का उपयोग करना:
या समान रूप से [[निश्चित खंड व्याकरण]] संकेतन का उपयोग करना:


<वाक्यविन्यास लैंग = प्रोलॉग>
program_optimized --> optimization_pass_1, optimization_pass_2, optimization_pass_3.
 
'''<वाक्यविन्यास लैंग = प्रोलॉग>
प्रोग्राम_ऑप्टिमाइज्ड --> ऑप्टिमाइज़ेशन_पास_1, ऑप्टिमाइज़ेशन_पास_2, ऑप्टिमाइज़ेशन_पास_3।
प्रोग्राम_ऑप्टिमाइज्ड --> ऑप्टिमाइज़ेशन_पास_1, ऑप्टिमाइज़ेशन_पास_2, ऑप्टिमाइज़ेशन_पास_3।
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>'''


=== क्विकसॉर्ट ===
=== क्विकसॉर्ट ===
त्वरित छँटाई एल्गोरिथ्म, एक सूची को उसके क्रमबद्ध संस्करण से संबंधित करता है:
त्वरित छँटाई कलनविधि, एक सूची को उसके क्रमबद्ध संस्करण से संबंधित करता है:
<वाक्यविन्यास लैंग = प्रोलॉग>
'''<वाक्यविन्यास लैंग = प्रोलॉग>
विभाजन ([], _, [], [])।
विभाजन ([], _, [], [])।
विभाजन ([X|Xs], पिवोट, स्माल्स, बिग्स): -
विभाजन ([X|Xs], पिवोट, स्माल्स, बिग्स): -'''
    (एक्स @<पिवट ->
  partition([], _, [], []).
        स्मॉल = [एक्स|रेस्ट],
 
        विभाजन (एक्सएस, धुरी, आराम, बड़ा)
partition([X|Xs], Pivot, Smalls, Bigs) :-
    ; बड़ा = [एक्स|बाकी],
    (   X @< Pivot ->
        विभाजन (एक्सएस, पिवोट, स्मॉल, रेस्ट)
        Smalls = [X|Rest],
    ).
        partition(Xs, Pivot, Rest, Bigs)
   
    ;   Bigs = [X|Rest],
क्विकसॉर्ट ([]) --> []
        partition(Xs, Pivot, Smalls, Rest)
क्विकसॉर्ट ([एक्स | एक्सएस]) -->
    ).
    {विभाजन (Xs, X, छोटा, बड़ा)},
 
    क्विकॉर्ट (छोटा), [एक्स], क्विकॉर्ट (बड़ा)
  quicksort([])     --> [].
</वाक्यविन्यास हाइलाइट>
quicksort([X|Xs]) -->
    { partition(Xs, X, Smaller, Bigger) },
    quicksort(Smaller), [X], quicksort(Bigger).
'''</वाक्यविन्यास हाइलाइट>'''


== प्रोलॉग == के डिजाइन पैटर्न
=== प्रोलॉग के डिजाइन पैटर्न ===
एक डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) सॉफ़्टवेयर डिज़ाइन में सामान्य रूप से होने वाली समस्या का एक सामान्य पुन: प्रयोज्य समाधान है। प्रोलॉग में कुछ डिज़ाइन पैटर्न कंकाल, तकनीक,<ref>{{Cite journal
एक डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) सॉफ़्टवेयर डिज़ाइन में सामान्य रूप से होने वाली समस्या का एक सामान्य पुन: प्रयोज्य समाधान है। प्रोलॉग में कुछ डिज़ाइन पैटर्न कंकाल, तकनीक,<ref>{{Cite journal
  | title = Applying Techniques to Skeletons
  | title = Applying Techniques to Skeletons
Line 199: Line 235:
|series=Lecture Notes in Computer Science / Lecture Notes in Artificial Intelligence
|series=Lecture Notes in Computer Science / Lecture Notes in Artificial Intelligence
|isbn=978-3-540-43959-2
|isbn=978-3-540-43959-2
}}</ref> क्लिचेस,<ref>D. Barker-Plummer. Cliche programming in Prolog. In M. Bruynooghe, editor, Proc. Second Workshop on Meta-Programming in Logic, pages 247--256. Dept. of Comp. Sci., Katholieke Univ. Leuven, 1990.</ref> कार्यक्रम आरेख<ref name=Gegg-harrison1995>{{Cite conference
}}</ref> क्लिचेस,<ref>D. Barker-Plummer. Cliche programming in Prolog. In M. Bruynooghe, editor, Proc. Second Workshop on Meta-Programming in Logic, pages 247--256. Dept. of Comp. Sci., Katholieke Univ. Leuven, 1990.</ref> कार्यक्रम आरेख<ref name="Gegg-harrison1995">{{Cite conference
  | title = Representing Logic Program Schemata in Prolog
  | title = Representing Logic Program Schemata in Prolog
  | year = 1995
  | year = 1995
Line 205: Line 241:
  | conference = Procs Twelfth International Conference on Logic Programming
  | conference = Procs Twelfth International Conference on Logic Programming
  | pages = 467–481
  | pages = 467–481
  }}</ref> तर्क विवरण स्कीमाटा,<ref name=Deville1990>{{Cite book
  }}</ref> तर्क विवरण स्कीमाटा,<ref name="Deville1990">{{Cite book
  | last1 = Deville  
  | last1 = Deville  
  | first1 = Yves  
  | first1 = Yves  
Line 213: Line 249:
  | location = Wokingham, England
  | location = Wokingham, England
  | isbn = 978-0-201-17576-9  
  | isbn = 978-0-201-17576-9  
  }}</ref> और [[उच्च क्रम प्रोग्रामिंग]]<ref name=Naish1996>{{Cite report
  }}</ref> और [[उच्च क्रम प्रोग्रामिंग]] हैं।<ref name="Naish1996">{{Cite report
  | title = Higher-order logic programming in Prolog
  | title = Higher-order logic programming in Prolog
  | year = 1996
  | year = 1996
Line 223: Line 259:


== उच्च क्रम प्रोग्रामिंग ==
== उच्च क्रम प्रोग्रामिंग ==
{{Main|Higher-order logic|Higher-order programming}}
{{Main|उच्च-क्रम तर्क|उच्च-क्रम प्रोग्रामिंग}}
एक उच्च-क्रम विधेय एक विधेय है जो तर्कों के रूप में एक या अधिक अन्य विधेय लेता है। हालांकि उच्च-क्रम प्रोग्रामिंग के लिए समर्थन प्रोलॉग को प्रथम-क्रम तर्क के क्षेत्र से बाहर ले जाता है, जो विधेय पर परिमाणीकरण की अनुमति नहीं देता है,<ref>{{cite web|title=With regard to Prolog variables, variables only in the head are implicitly universally quantified, and those only in the body are implicitly existentially quantified|url=http://okmij.org/ftp/Prolog/quantification.txt|access-date=2013-05-04}}</ref> आईएसओ प्रोलॉग में अब कुछ अंतर्निहित उच्च-क्रम विधेय हैं जैसे <code>call/1</code>, <code>call/2</code>, <code>call/3</code>, <code>findall/3</code>, <code>setof/3</code>, और <code>bagof/3</code>.<ref name="ISO 13211"/>  इसके अलावा, चूंकि मनमाने ढंग से प्रोलॉग लक्ष्यों का निर्माण और रन-टाइम पर मूल्यांकन किया जा सकता है, इसलिए उच्च-क्रम के विधेय को लिखना आसान है जैसे <code>maplist/2</code>, जो किसी दी गई सूची के प्रत्येक सदस्य के लिए एक मनमाना विधेय लागू करता है, और <code>sublist/3</code>, जो किसी दिए गए विधेय को संतुष्ट करने वाले तत्वों को फ़िल्टर करता है, साथ ही [[करी]] करने की भी अनुमति देता है।<ref name="Naish1996"/>


स्थानिक प्रतिनिधित्व (शर्तों) में अस्थायी प्रतिनिधित्व (बैकट्रैकिंग पर उत्तर प्रतिस्थापन) से समाधानों को परिवर्तित करने के लिए, प्रोलॉग में विभिन्न सभी-समाधान विधेय हैं जो एक सूची में दी गई क्वेरी के सभी उत्तर प्रतिस्थापन एकत्र करते हैं। इसका उपयोग [[सूची समझ]] के लिए किया जा सकता है। उदाहरण के लिए, पूर्ण संख्याएँ उनके उचित विभाजकों के योग के बराबर होती हैं:
एक उच्च-क्रम विधेय एक विधेय है जो तर्कों के रूप में एक या अधिक अन्य विधेय लेता है। चूंकि उच्च-क्रम प्रोग्रामिंग के लिए समर्थन प्रोलॉग को प्रथम-क्रम तर्क के क्षेत्र से बाहर ले जाता है, जो विधेय पर परिमाणीकरण की अनुमति नहीं देता है,<ref>{{cite web|title=With regard to Prolog variables, variables only in the head are implicitly universally quantified, and those only in the body are implicitly existentially quantified|url=http://okmij.org/ftp/Prolog/quantification.txt|access-date=2013-05-04}}</ref> आईएसओ प्रोलॉग में अब कुछ अंतर्निहित उच्च-क्रम विधेय हैं जैसे <code>call/1</code>, <code>call/2</code>, <code>call/3</code>, <code>findall/3</code>, <code>setof/3</code>, और <code>bagof/3</code>.<ref name="ISO 13211"/>  इसके अतिरिक्त, चूंकि मनमाने ढंग से प्रोलॉग लक्ष्यों का निर्माण और रन-टाइम पर मूल्यांकन किया जा सकता है, इसलिए उच्च-क्रम के विधेय को लिखना आसान है जैसे <code>maplist/2</code>, जो किसी दी गई सूची के प्रत्येक सदस्य के लिए एक इच्छानुसार विधेय प्रयुक्त करता है, और <code>sublist/3</code>, जो किसी दिए गए विधेय को संतुष्ट करने वाले तत्वों को फ़िल्टर करता है, साथ ही [[करी]] करने की भी अनुमति देता है।<ref name="Naish1996"/>
<वाक्यविन्यास लैंग = प्रोलॉग>
 
उत्तम (एन) :-
स्थानिक प्रतिनिधित्व (नियमो) में अस्थायी प्रतिनिधित्व (बैकट्रैकिंग पर उत्तर प्रतिस्थापन) से समाधानों को परिवर्तित करने के लिए, प्रोलॉग में विभिन्न सभी-समाधान विधेय हैं जो एक सूची में दी गई क्वेरी के सभी उत्तर प्रतिस्थापन एकत्र करते हैं। इसका उपयोग [[सूची समझ]] के लिए किया जा सकता है। उदाहरण के लिए, पूर्ण संख्याएँ उनके उचित विभाजकों के योग के बराबर होती हैं:
    बीच (1, inf, एन), यू एन // 2 है,
'''<वाक्यविन्यास लैंग = प्रोलॉग>'''
    Findall(D, (बीच में (1,U,D), N mod D =:= 0), Ds),
  perfect(N) :-
    योग सूची (डीएस, एन)
      between(1, inf, N), U is N // 2,
</वाक्यविन्यास हाइलाइट>
      findall(D, (between(1,U,D), N mod D =:= 0), Ds),
इसका उपयोग पूर्ण संख्याओं की गणना करने के लिए किया जा सकता है, और यह जांचने के लिए भी किया जा सकता है कि कोई संख्या पूर्ण है या नहीं।
 
      sumlist(Ds, N).
'''</वाक्यविन्यास हाइलाइट>'''
 
इसका उपयोग पूर्ण संख्याओं की गणना करने के लिए किया जा सकता है, और यह जांचने के लिए भी किया जा सकता है कि कोई संख्या पूर्ण है या नहीं है।
 
एक अन्य उदाहरण के रूप में, विधेय <code>maplist</code> एक विधेय प्रयुक्त करता है <code>P</code> सूचियों की एक जोड़ी में सभी संबंधित पदों के लिए:
 
'''<वाक्यविन्यास लैंग = प्रोलॉग>'''


एक अन्य उदाहरण के रूप में, विधेय <code>maplist</code> एक विधेय लागू करता है <code>P</code> सूचियों की एक जोड़ी में सभी संबंधित पदों के लिए:
maplist(_, [], []).
maplist(P, [X|Xs], [Y|Ys]) :-
    call(P, X, Y), 


<वाक्यविन्यास लैंग = प्रोलॉग>
मैपलिस्ट (_, [], [])।
  maplist (P, Xs, Ys).
maplist(P, [X|Xs], [Y|Ys]) :-
'''</वाक्यविन्यास हाइलाइट>'''
  कॉल (पी, एक्स, वाई),
  मैपलिस्ट (पी, एक्सएस, वाईएस)
</वाक्यविन्यास हाइलाइट>


कब <code>P</code> एक विधेय है जो सभी के लिए है <code>X</code>, <code>P(X,Y)</code> एकीकृत <code>Y</code> एक अद्वितीय मूल्य के साथ, <code>maplist(P, Xs, Ys)</code> [[कार्यात्मक प्रोग्रामिंग]] में मानचित्र (उच्च-क्रम फ़ंक्शन) फ़ंक्शन को लागू करने के बराबर है <code>Ys = map(Function, Xs)</code>.
कब <code>P</code> एक विधेय है जो सभी के लिए है <code>X</code>, <code>P(X,Y)</code> एकीकृत <code>Y</code> एक अद्वितीय मूल्य के साथ, <code>maplist(P, Xs, Ys)</code> [[कार्यात्मक प्रोग्रामिंग]] में मानचित्र (उच्च-क्रम फलन) '''फलन को प्रयुक्त करने के बराबर है''' <code>Ys = map(Function, Xs)</code> को प्रयुक्त करने के बराबर है।


प्रोलॉग में उच्च-क्रम प्रोग्रामिंग शैली का नेतृत्व [[HiLog]] और λProlog में किया गया था।
प्रोलॉग में उच्च-क्रम प्रोग्रामिंग शैली का नेतृत्व [[HiLog|हायलॉग]] और λ प्रोलॉग में किया गया था।


== मॉड्यूल ==
== मॉड्यूल ==
बड़े में प्रोग्रामिंग और छोटे में प्रोग्रामिंग के लिए # बड़े में प्रोग्रामिंग, प्रोलॉग एक [[मॉड्यूलर प्रोग्रामिंग]] प्रदान करता है। मॉड्यूल सिस्टम आईएसओ द्वारा मानकीकृत है।<ref>ISO/IEC 13211-2: Modules.</ref> हालांकि, सभी प्रोलॉग कंपाइलर्स मॉड्यूल का समर्थन नहीं करते हैं, और प्रमुख प्रोलॉग कंपाइलर्स के मॉड्यूल सिस्टम के बीच संगतता समस्याएं हैं।<ref name="cs.kuleuven.ac.be">{{citation|first=Paulo|last=Moura|title=Logtalk|journal=Association of Logic Programming|volume=17|issue=3|date=August 2004|url=http://www.cs.kuleuven.ac.be/~dtai/projects/ALP/newsletter/aug04/nav/print/all.html#logtalk}}</ref> नतीजतन, एक प्रोलॉग कंपाइलर पर लिखे गए मॉड्यूल जरूरी नहीं कि दूसरों पर काम करेंगे।
बड़े में प्रोग्रामिंग और छोटे में प्रोग्रामिंग के लिए # बड़े में प्रोग्रामिंग, प्रोलॉग एक [[मॉड्यूलर प्रोग्रामिंग]] प्रदान करता है। मॉड्यूल प्रणाली आईएसओ द्वारा मानकीकृत है।<ref>ISO/IEC 13211-2: Modules.</ref> चूंकि, सभी प्रोलॉग कंपाइलर्स मॉड्यूल का समर्थन नहीं करते हैं, और प्रमुख प्रोलॉग कंपाइलर्स के मॉड्यूल प्रणाली के बीच संगतता समस्याएं हैं।<ref name="cs.kuleuven.ac.be">{{citation|first=Paulo|last=Moura|title=Logtalk|journal=Association of Logic Programming|volume=17|issue=3|date=August 2004|url=http://www.cs.kuleuven.ac.be/~dtai/projects/ALP/newsletter/aug04/nav/print/all.html#logtalk}}</ref> परिणामस्वरूप, एक प्रोलॉग कंपाइलर पर लिखे गए मॉड्यूल जरूरी नहीं कि दूसरों पर काम करेंगे।


== पार्सिंग ==
== पार्सिंग ==
{{Main|Prolog syntax and semantics#Definite clause grammars|Definite clause grammar}}
{{Main|प्रोलॉग वाक्य-विन्यास और शब्दार्थ # निश्चित खंड व्याकरण|निश्चित खंड व्याकरण}}
निश्चित खंड व्याकरण (डीसीजी) नामक एक विशेष संकेतन है। के माध्यम से परिभाषित एक नियम <code>-->/2</code> के बजाय <code>:-/2</code> प्रीप्रोसेसर द्वारा विस्तारित किया गया है (<code>expand_term/2</code>, अन्य भाषाओं में मैक्रोज़ के अनुरूप एक सुविधा) कुछ सीधे पुनर्लेखन नियमों के अनुसार, जिसके परिणामस्वरूप सामान्य प्रोलॉग खंड होते हैं। सबसे विशेष रूप से, पुनर्लेखन विधेय को दो अतिरिक्त तर्कों से लैस करता है, जिसका उपयोग आस-पास की स्थिति को थ्रेड करने के लिए किया जा सकता है,{{Clarify|date=October 2012}} अन्य भाषाओं में [[कार्यात्मक प्रोग्रामिंग में मोनैड]] के समान। DCG का उपयोग अक्सर पार्सर्स या सूची जनरेटर लिखने के लिए किया जाता है, क्योंकि वे अंतर सूचियों के लिए एक सुविधाजनक इंटरफ़ेस भी प्रदान करते हैं।
 
निश्चित खंड व्याकरण (डीसीजी) नामक एक विशेष संकेतन है। <code>expand_term/2</code> के माध्यम से परिभाषित एक नियम <code>-->/2</code> के अतिरिक्त <code>:-/2</code> प्रीप्रोसेसर द्वारा विस्तारित किया गया है, अन्य भाषाओं में मैक्रोज़ के अनुरूप एक सुविधा) कुछ सीधे पुनर्लेखन नियमों के अनुसार, जिसके परिणामस्वरूप सामान्य प्रोलॉग खंड होते हैं। सबसे विशेष रूप से, पुनर्लेखन विधेय को दो अतिरिक्त तर्कों से लैस करता है, जिसका उपयोग आस-पास की स्थिति को थ्रेड करने के लिए किया जा सकता है,{{Clarify|date=October 2012}} अन्य भाषाओं में [[कार्यात्मक प्रोग्रामिंग में मोनैड]] के समान। DCG का उपयोग अक्सर पार्सर्स या सूची जनरेटर लिखने के लिए किया जाता है, क्योंकि वे अंतर सूचियों के लिए एक सुविधाजनक इंटरफ़ेस भी प्रदान करते हैं।


== मेटा-दुभाषिया और प्रतिबिंब ==
== मेटा-दुभाषिया और प्रतिबिंब ==
Line 269: Line 312:
कहाँ <code>true</code> एक खाली संयोजन का प्रतिनिधित्व करता है, और <code>clause(Head, Body)</code> प्रपत्र के डेटाबेस में खंडों के साथ एकीकृत करता है <code>Head :- Body</code>.
कहाँ <code>true</code> एक खाली संयोजन का प्रतिनिधित्व करता है, और <code>clause(Head, Body)</code> प्रपत्र के डेटाबेस में खंडों के साथ एकीकृत करता है <code>Head :- Body</code>.


चूंकि प्रोलॉग कार्यक्रम स्वयं प्रोलॉग शर्तों के अनुक्रम हैं (<code>:-/2</code> एक इंफिक्स ऑपरेटर (प्रोग्रामिंग) है जिसे अंतर्निहित तंत्र (जैसे <code>read/1</code>), अनुकूलित दुभाषियों को लिखना संभव है जो डोमेन-विशिष्ट विशेषताओं के साथ प्रोलॉग को बढ़ाते हैं। उदाहरण के लिए, स्टर्लिंग और शापिरो एक मेटा-दुभाषिया प्रस्तुत करते हैं जो अनिश्चितता के साथ तर्क करता है, यहां मामूली संशोधनों के साथ पुन: प्रस्तुत किया गया है:<ref name=AOP94>{{cite book |author1=Shapiro, Ehud Y. |author2=Sterling, Leon |title=The Art of Prolog: Advanced Programming Techniques |publisher=MIT Press |location=Cambridge, Massachusetts |year=1994 |isbn=978-0-262-19338-2 }}</ref>{{rp|330}}
चूंकि प्रोलॉग कार्यक्रम स्वयं प्रोलॉग नियमो के अनुक्रम हैं (<code>:-/2</code> एक इंफिक्स ऑपरेटर (प्रोग्रामिंग) है जिसे अंतर्निहित तंत्र (जैसे <code>read/1</code>), अनुकूलित दुभाषियों को लिखना संभव है जो डोमेन-विशिष्ट विशेषताओं के साथ प्रोलॉग को बढ़ाते हैं। उदाहरण के लिए, स्टर्लिंग और शापिरो एक मेटा-दुभाषिया प्रस्तुत करते हैं जो अनिश्चितता के साथ तर्क करता है, यहां मामूली संशोधनों के साथ पुन: प्रस्तुत किया गया है:<ref name=AOP94>{{cite book |author1=Shapiro, Ehud Y. |author2=Sterling, Leon |title=The Art of Prolog: Advanced Programming Techniques |publisher=MIT Press |location=Cambridge, Massachusetts |year=1994 |isbn=978-0-262-19338-2 }}</ref>{{rp|330}}
<वाक्यविन्यास लैंग = प्रोलॉग>
<वाक्यविन्यास लैंग = प्रोलॉग>
हल (सत्य, 1) :- !.
हल (सत्य, 1) :- !.
Line 296: Line 339:


== ट्यूरिंग पूर्णता ==
== ट्यूरिंग पूर्णता ==
प्योर प्रोलॉग फर्स्ट-ऑर्डर प्रेडिकेट लॉजिक, हॉर्न क्लॉज के सबसेट पर आधारित है, जो ट्यूरिंग पूर्णता है। ट्यूरिंग-पूर्ण। ट्यूरिंग मशीन का अनुकरण करने के लिए प्रोलॉग की ट्यूरिंग पूर्णता को इसका उपयोग करके दिखाया जा सकता है:
शुद्ध प्रोलॉग फर्स्ट-ऑर्डर प्रेडिकेट लॉजिक, हॉर्न क्लॉज के सबसेट पर आधारित है, जो ट्यूरिंग पूर्णता है। ट्यूरिंग-पूर्ण। ट्यूरिंग मशीन का अनुकरण करने के लिए प्रोलॉग की ट्यूरिंग पूर्णता को इसका उपयोग करके दिखाया जा सकता है:
<वाक्यविन्यास लैंग = प्रोलॉग>
<वाक्यविन्यास लैंग = प्रोलॉग>
ट्यूरिंग(टेप0, टेप) :-
ट्यूरिंग(टेप0, टेप) :-
Line 333: Line 376:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


== कार्यान्वयन ==
== कार्यान्वयन ==
Line 344: Line 387:


=== संकलन ===
=== संकलन ===
दक्षता के लिए, प्रोलॉग कोड को आम तौर पर अमूर्त मशीन कोड में संकलित किया जाता है, जो अक्सर रजिस्टर-आधारित वॉरेन सार मशीन (डब्ल्यूएएम) निर्देश सेट से प्रभावित होता है।<ref>David H. D. Warren. [http://www.ai.sri.com/pubs/files/641.pdf "An abstract Prolog instruction set"]. Technical Note 309, [[SRI International]], Menlo Park, CA, October 1983.</ref> कुछ कार्यान्वयन संकलन समय पर विधेय के प्रकार और मोड की जानकारी प्राप्त करने के लिए अमूर्त व्याख्या को नियोजित करते हैं, या उच्च प्रदर्शन के लिए वास्तविक मशीन कोड को संकलित करते हैं।<ref>{{Cite journal | doi = 10.1109/2.108055 | last1 = Van Roy | first1 = P. | last2 = Despain | first2 = A. M. | title = High-performance logic programming with the Aquarius Prolog compiler | journal = Computer | volume = 25 | pages = 54–68 | year = 1992| s2cid = 16447071 }}</ref> प्रोलॉग कोड के लिए कुशल कार्यान्वयन विधियों को तैयार करना तर्क प्रोग्रामिंग समुदाय में सक्रिय शोध का एक क्षेत्र है, और कुछ क्रियान्वयनों में कई अन्य निष्पादन विधियों को नियोजित किया जाता है। इनमें [[खंड द्वैतकरण]] और स्टैक मशीन | स्टैक-आधारित वर्चुअल मशीन शामिल हैं।{{Citation needed|date=November 2010}}
दक्षता के लिए, प्रोलॉग कोड को सामान्यतः अमूर्त मशीन कोड में संकलित किया जाता है, जो अक्सर रजिस्टर-आधारित वॉरेन सार मशीन (डब्ल्यूएएम) निर्देश सेट से प्रभावित होता है।<ref>David H. D. Warren. [http://www.ai.sri.com/pubs/files/641.pdf "An abstract Prolog instruction set"]. Technical Note 309, [[SRI International]], Menlo Park, CA, October 1983.</ref> कुछ कार्यान्वयन संकलन समय पर विधेय के प्रकार और मोड की जानकारी प्राप्त करने के लिए अमूर्त व्याख्या को नियोजित करते हैं, या उच्च प्रदर्शन के लिए वास्तविक मशीन कोड को संकलित करते हैं।<ref>{{Cite journal | doi = 10.1109/2.108055 | last1 = Van Roy | first1 = P. | last2 = Despain | first2 = A. M. | title = High-performance logic programming with the Aquarius Prolog compiler | journal = Computer | volume = 25 | pages = 54–68 | year = 1992| s2cid = 16447071 }}</ref> प्रोलॉग कोड के लिए कुशल कार्यान्वयन विधियों को तैयार करना तर्क प्रोग्रामिंग समुदाय में सक्रिय शोध का एक क्षेत्र है, और कुछ क्रियान्वयनों में कई अन्य निष्पादन विधियों को नियोजित किया जाता है। इनमें [[खंड द्वैतकरण]] और स्टैक मशीन | स्टैक-आधारित वर्चुअल मशीन सम्मिलित हैं।{{Citation needed|date=November 2010}}




=== टेल रिकर्सन ===
=== टेल प्रत्यावर्तन ===
प्रोलॉग सिस्टम आम तौर पर टेल कॉल # टेल कॉल ऑप्टिमाइज़ेशन (TCO) नामक एक प्रसिद्ध ऑप्टिमाइज़ेशन पद्धति को लागू करते हैं, जो नियतात्मक भविष्यवाणियों के लिए टेल रिकर्सन या अधिक आम तौर पर, टेल कॉल्स को प्रदर्शित करता है: टेल पोजीशन में कॉल करने से पहले क्लॉज़ के स्टैक फ्रेम को छोड़ दिया जाता है। इसलिए, नियतात्मक पूँछ-पुनरावर्ती विधेय को स्थिर स्टैक स्पेस के साथ निष्पादित किया जाता है, जैसे अन्य भाषाओं में लूप।
प्रोलॉग प्रणाली सामान्यतः टेल कॉल # टेल कॉल ऑप्टिमाइज़ेशन (TCO) नामक एक प्रसिद्ध ऑप्टिमाइज़ेशन पद्धति को प्रयुक्त करते हैं, जो नियतात्मक भविष्यवाणियों के लिए टेल प्रत्यावर्तन या अधिक सामान्यतः, टेल कॉल्स को प्रदर्शित करता है: टेल पोजीशन में कॉल करने से पहले क्लॉज़ के स्टैक फ्रेम को छोड़ दिया जाता है। इसलिए, नियतात्मक पूँछ-पुनरावर्ती विधेय को स्थिर स्टैक स्पेस के साथ निष्पादित किया जाता है, जैसे अन्य भाषाओं में लूप।


=== टर्म इंडेक्सिंग ===
=== टर्म इंडेक्सिंग ===
{{Main|Term indexing}}
{{Main|Term indexing}}
किसी क्वेरी में किसी शब्द के साथ अनुपयोगी होने वाले खंड ढूँढना खंडों की संख्या में रैखिक है। टर्म इंडेक्सिंग एक [[डेटा संरचना]] का उपयोग करता है जो सबलाइनियर टाइम | सब-लीनियर-टाइम लुकअप को सक्षम करता है।<ref>{{Cite book |last1=Graf |first1=Peter |title=Term indexing |year=1995 |publisher=Springer |isbn=978-3-540-61040-3}}</ref> अनुक्रमण केवल कार्यक्रम के प्रदर्शन को प्रभावित करता है, यह शब्दार्थ को प्रभावित नहीं करता है। अधिकांश प्रोलॉग्स केवल पहले शब्द पर अनुक्रमण का उपयोग करते हैं, क्योंकि सभी शर्तों पर अनुक्रमण करना महंगा है, लेकिन फ़ील्ड-एन्कोडेड शब्दों या सुपरइम्पोज़्ड कोड कोडवर्ड पर आधारित तकनीकें पूर्ण क्वेरी और शीर्ष पर तेज़ अनुक्रमण प्रदान करती हैं।<ref name=WisePowers>{{cite conference |last1=Wise |first1=Michael J. |last2=Powers |first2=David M. W. |title=Indexing Prolog Clauses via Superimposed Code Words and Field Encoded Words |journal=International Symposium on Logic Programming |pages=203–210 |year=1986}}</ref><ref name=Colomb>{{Cite journal | doi = 10.1016/0743-1066(91)90004-9| title = Enhancing unification in PROLOG through clause indexing| journal = The Journal of Logic Programming| volume = 10| pages = 23–44| year = 1991| last1 = Colomb | first1 = Robert M. | doi-access = free}}</ref>
किसी क्वेरी में किसी शब्द के साथ अनुपयोगी होने वाले खंड ढूँढना खंडों की संख्या में रैखिक है। टर्म इंडेक्सिंग एक [[डेटा संरचना]] का उपयोग करता है जो सबलाइनियर टाइम | सब-लीनियर-टाइम लुकअप को सक्षम करता है।<ref>{{Cite book |last1=Graf |first1=Peter |title=Term indexing |year=1995 |publisher=Springer |isbn=978-3-540-61040-3}}</ref> अनुक्रमण केवल कार्यक्रम के प्रदर्शन को प्रभावित करता है, यह शब्दार्थ को प्रभावित नहीं करता है। अधिकांश प्रोलॉग्स केवल पहले शब्द पर अनुक्रमण का उपयोग करते हैं, क्योंकि सभी नियमो पर अनुक्रमण करना महंगा है, लेकिन फ़ील्ड-एन्कोडेड शब्दों या सुपरइम्पोज़्ड कोड कोडवर्ड पर आधारित तकनीकें पूर्ण क्वेरी और शीर्ष पर तेज़ अनुक्रमण प्रदान करती हैं।<ref name=WisePowers>{{cite conference |last1=Wise |first1=Michael J. |last2=Powers |first2=David M. W. |title=Indexing Prolog Clauses via Superimposed Code Words and Field Encoded Words |journal=International Symposium on Logic Programming |pages=203–210 |year=1986}}</ref><ref name=Colomb>{{Cite journal | doi = 10.1016/0743-1066(91)90004-9| title = Enhancing unification in PROLOG through clause indexing| journal = The Journal of Logic Programming| volume = 10| pages = 23–44| year = 1991| last1 = Colomb | first1 = Robert M. | doi-access = free}}</ref>




=== हैशिंग ===
=== हैशिंग ===
कुछ प्रोलॉग सिस्टम, जैसे [[तर्क प्रोग्रामिंग एसोसिएट्स]] | विन-प्रोलॉग और एसडब्ल्यूआई-प्रोलॉग, अब बड़े डेटासेट को अधिक कुशलता से संभालने में मदद करने के लिए हैशिंग लागू करते हैं। वर्डनेट जैसे बड़े कॉर्पोरा के साथ काम करने पर यह बहुत बड़ा प्रदर्शन लाभ देता है।
कुछ प्रोलॉग प्रणाली, जैसे [[तर्क प्रोग्रामिंग एसोसिएट्स]] | विन-प्रोलॉग और एसडब्ल्यूआई-प्रोलॉग, अब बड़े डेटासेट को अधिक कुशलता से संभालने में सहायता करने के लिए हैशिंग प्रयुक्त करते हैं। वर्डनेट जैसे बड़े कॉर्पोरा के साथ काम करने पर यह बहुत बड़ा प्रदर्शन लाभ देता है।


=== टेबलिंग ===
=== टेबलिंग ===
कुछ प्रोलॉग सिस्टम, ([[बी-प्रोलॉग]], एक्सएसबी, एसडब्ल्यूआई-प्रोलॉग, वाईएपी (प्रोलॉग), और सीआओ (प्रोग्रामिंग भाषा)), टेबलिंग नामक [[memoization]] विधि को लागू करते हैं, जो उपयोगकर्ता को मध्यवर्ती परिणामों को मैन्युअल रूप से संग्रहीत करने से मुक्त करता है। टेबलिंग एक स्पेस-टाइम ट्रेडऑफ़ है; मध्यवर्ती परिणामों को संग्रहीत करने के लिए अधिक मेमोरी का उपयोग करके निष्पादन समय को कम किया जा सकता है:<ref>{{Cite journal | last1 = Swift | first1 = T. | journal = Annals of Mathematics and Artificial Intelligence | volume = 25 | issue = 3/4 | pages = 201–240|title=Tabling for non‐monotonic programming | year = 1999 | doi = 10.1023/A:1018990308362| s2cid = 16695800 }}</ref><ref>{{cite journal|last1=Zhou|first1=Neng-Fa|last2=Sato|first2=Taisuke|title=Efficient Fixpoint Computation in Linear Tabling|journal=Proceedings of the 5th ACM SIGPLAN International Conference on Principles and Practice of Declarative Programming|date=2003|pages=275–283|url=http://www.sci.brooklyn.cuny.edu/~zhou/papers/ppdp03.pdf}}</ref>
कुछ प्रोलॉग प्रणाली, ([[बी-प्रोलॉग]], एक्सएसबी, एसडब्ल्यूआई-प्रोलॉग, वाईएपी (प्रोलॉग), और सीआओ (प्रोग्रामिंग भाषा)), टेबलिंग नामक [[memoization]] विधि को प्रयुक्त करते हैं, जो उपयोगकर्ता को मध्यवर्ती परिणामों को मैन्युअल रूप से संग्रहीत करने से मुक्त करता है। टेबलिंग एक स्पेस-टाइम ट्रेडऑफ़ है; मध्यवर्ती परिणामों को संग्रहीत करने के लिए अधिक मेमोरी का उपयोग करके निष्पादन समय को कम किया जा सकता है:<ref>{{Cite journal | last1 = Swift | first1 = T. | journal = Annals of Mathematics and Artificial Intelligence | volume = 25 | issue = 3/4 | pages = 201–240|title=Tabling for non‐monotonic programming | year = 1999 | doi = 10.1023/A:1018990308362| s2cid = 16695800 }}</ref><ref>{{cite journal|last1=Zhou|first1=Neng-Fa|last2=Sato|first2=Taisuke|title=Efficient Fixpoint Computation in Linear Tabling|journal=Proceedings of the 5th ACM SIGPLAN International Conference on Principles and Practice of Declarative Programming|date=2003|pages=275–283|url=http://www.sci.brooklyn.cuny.edu/~zhou/papers/ppdp03.pdf}}</ref>
<blockquote>क्वेरी मूल्यांकन में सामने आए उपलक्ष्यों को इन उपलक्ष्यों के उत्तरों के साथ एक तालिका में बनाए रखा जाता है। यदि कोई उप-लक्ष्य फिर से मिलता है, तो मूल्यांकन प्रोग्राम क्लॉज के खिलाफ संकल्प को फिर से करने के बजाय तालिका से जानकारी का पुन: उपयोग करता है।<ref>{{Cite journal | doi = 10.1017/S1471068411000500| title = XSB: Extending Prolog with Tabled Logic Programming| journal = Theory and Practice of Logic Programming| volume = 12| issue = 1–2| pages = 157–187| year = 2011| last1 = Swift | first1 = T. | last2 = Warren | first2 = D. S. | arxiv = 1012.5123| s2cid = 6153112}}</ref></ब्लॉककोट>
<blockquote>क्वेरी मूल्यांकन में सामने आए उपलक्ष्यों को इन उपलक्ष्यों के उत्तरों के साथ एक तालिका में बनाए रखा जाता है। यदि कोई उप-लक्ष्य फिर से मिलता है, तो मूल्यांकन प्रोग्राम क्लॉज के खिलाफ संकल्प को फिर से करने के अतिरिक्त तालिका से जानकारी का पुन: उपयोग करता है।<ref>{{Cite journal | doi = 10.1017/S1471068411000500| title = XSB: Extending Prolog with Tabled Logic Programming| journal = Theory and Practice of Logic Programming| volume = 12| issue = 1–2| pages = 157–187| year = 2011| last1 = Swift | first1 = T. | last2 = Warren | first2 = D. S. | arxiv = 1012.5123| s2cid = 6153112}}</ref></ब्लॉककोट>
टेबलिंग को विभिन्न दिशाओं में बढ़ाया जा सकता है। यह एसएलजी-रिज़ॉल्यूशन या लीनियर टेबलिंग के माध्यम से पुनरावर्ती विधेय का समर्थन कर सकता है। बहु-थ्रेडेड प्रोलॉग सिस्टम में टेबलिंग परिणामों को एक थ्रेड के लिए निजी रखा जा सकता है या सभी थ्रेड्स के बीच साझा किया जा सकता है। और वृद्धिशील टेबलिंग में, टेबलिंग परिवर्तनों पर प्रतिक्रिया कर सकती है।
टेबलिंग को विभिन्न दिशाओं में बढ़ाया जा सकता है। यह एसएलजी-रिज़ॉल्यूशन या लीनियर टेबलिंग के माध्यम से पुनरावर्ती विधेय का समर्थन कर सकता है। बहु-थ्रेडेड प्रोलॉग प्रणाली में टेबलिंग परिणामों को एक थ्रेड के लिए निजी रखा जा सकता है या सभी थ्रेड्स के बीच साझा किया जा सकता है। और वृद्धिशील टेबलिंग में, टेबलिंग परिवर्तनों पर प्रतिक्रिया कर सकती है।


=== हार्डवेयर में कार्यान्वयन ===
=== हार्डवेयर में कार्यान्वयन ===
पांचवीं पीढ़ी [[पांचवीं पीढ़ी के कंप्यूटर सिस्टम प्रोजेक्ट]] दौरान समर्पित आर्किटेक्चर के साथ तेजी से निष्पादन प्राप्त करने के उद्देश्य से हार्डवेयर में प्रोलॉग को लागू करने का प्रयास किया गया था।<ref>{{Cite book | first5 = K.| last5 = Kiriyama| pages = 100| doi = 10.1145/30350.30362| year = 1987 | first4 = K.| last4 = Kurosawa| last2 = Bandoh | first1 = S. | first2 = T.| title = Proceedings of the 14th annual international symposium on Computer architecture - ISCA '87| last3 = Yamaguchi | first3 = S.| last1 = Abe| chapter = High performance integrated Prolog processor IPP| isbn = 978-0818607769| s2cid = 10283148}}</ref><ref>{{cite conference |first=Ian |last=Robinson |isbn=978-3-540-16492-0 |doi=10.1007/3-540-16492-8_73 |title=A Prolog processor based on a pattern matching memory device |conference=Third International Conference on Logic Programming |series=Lecture Notes in Computer Science |publisher=Springer |volume=225|pages=172–179|year=1986}}</ref><ref>{{Cite journal| journal = ACM SIGPLAN Notices| title = Performance and architectural evaluation of the PSI machine| volume = 22| pages = 128| doi = 10.1145/36205.36195| year = 1987| last1 = Taki | first4 = M.| last2 = Nakajima | first1 = K.| last4 = Ikeda | first2 = K.| last3 = Nakashima | first3 = H.| issue = 10| doi-access = free}}</ref> इसके अलावा, प्रोलॉग में कई गुण हैं जो समानांतर निष्पादन के माध्यम से गति बढ़ाने की अनुमति दे सकते हैं।<ref>{{Cite journal| journal = ACM Transactions on Programming Languages and Systems| title = Parallel execution of prolog programs: a survey | first5 = M. V.| volume = 23| pages = 472| doi = 10.1145/504083.504085| year = 2001| last1 = Gupta| last5 = Hermenegildo| last2 = Pontelli | first1 = G. | first2 = E.| last3 = Ali| last4 = Carlsson | first3 = K. A. M. | first4 = M.| issue = 4| s2cid = 2978041 | url = http://oa.upm.es/11160/ | doi-access = free}}</ref> प्रतिबंधित प्रोलॉग प्रोग्राम को फ़ील्ड प्रोग्राम करने योग्य गेट सरणी में संकलित करने के लिए एक और हालिया दृष्टिकोण रहा है।<ref>{{Cite web|url=http://www.cl.cam.ac.uk/~am21/research/sa/byrdbox.ps.gz|title=Statically Allocated Systems}}</ref> हालांकि, सामान्य-उद्देश्य वाले हार्डवेयर में तेजी से प्रगति ने लगातार अधिक विशिष्ट आर्किटेक्चर को पीछे छोड़ दिया है।
पांचवीं पीढ़ी [[पांचवीं पीढ़ी के कंप्यूटर सिस्टम प्रोजेक्ट|पांचवीं पीढ़ी के कंप्यूटर प्रणाली प्रोजेक्ट]] समय समर्पित आर्किटेक्चर के साथ तेजी से निष्पादन प्राप्त करने के उद्देश्य से हार्डवेयर में प्रोलॉग को प्रयुक्त करने का प्रयास किया गया था।<ref>{{Cite book | first5 = K.| last5 = Kiriyama| pages = 100| doi = 10.1145/30350.30362| year = 1987 | first4 = K.| last4 = Kurosawa| last2 = Bandoh | first1 = S. | first2 = T.| title = Proceedings of the 14th annual international symposium on Computer architecture - ISCA '87| last3 = Yamaguchi | first3 = S.| last1 = Abe| chapter = High performance integrated Prolog processor IPP| isbn = 978-0818607769| s2cid = 10283148}}</ref><ref>{{cite conference |first=Ian |last=Robinson |isbn=978-3-540-16492-0 |doi=10.1007/3-540-16492-8_73 |title=A Prolog processor based on a pattern matching memory device |conference=Third International Conference on Logic Programming |series=Lecture Notes in Computer Science |publisher=Springer |volume=225|pages=172–179|year=1986}}</ref><ref>{{Cite journal| journal = ACM SIGPLAN Notices| title = Performance and architectural evaluation of the PSI machine| volume = 22| pages = 128| doi = 10.1145/36205.36195| year = 1987| last1 = Taki | first4 = M.| last2 = Nakajima | first1 = K.| last4 = Ikeda | first2 = K.| last3 = Nakashima | first3 = H.| issue = 10| doi-access = free}}</ref> इसके अतिरिक्त, प्रोलॉग में कई गुण हैं जो समानांतर निष्पादन के माध्यम से गति बढ़ाने की अनुमति दे सकते हैं।<ref>{{Cite journal| journal = ACM Transactions on Programming Languages and Systems| title = Parallel execution of prolog programs: a survey | first5 = M. V.| volume = 23| pages = 472| doi = 10.1145/504083.504085| year = 2001| last1 = Gupta| last5 = Hermenegildo| last2 = Pontelli | first1 = G. | first2 = E.| last3 = Ali| last4 = Carlsson | first3 = K. A. M. | first4 = M.| issue = 4| s2cid = 2978041 | url = http://oa.upm.es/11160/ | doi-access = free}}</ref> प्रतिबंधित प्रोलॉग प्रोग्राम को फ़ील्ड प्रोग्राम करने योग्य गेट सरणी में संकलित करने के लिए एक और आधुनिक दृष्टिकोण रहा है।<ref>{{Cite web|url=http://www.cl.cam.ac.uk/~am21/research/sa/byrdbox.ps.gz|title=Statically Allocated Systems}}</ref> चूंकि, सामान्य-उद्देश्य वाले हार्डवेयर में तेजी से प्रगति ने निरंतर अधिक विशिष्ट आर्किटेक्चर को पीछे छोड़ दिया है।


सेगा ने 1986 में जापानी बाजार के लिए जारी किए गए सेगा एआई कंप्यूटर के साथ उपयोग के लिए प्रोलॉग को लागू किया। प्रोलॉग का उपयोग टच पैड के माध्यम से [[जापानी भाषा]] में [[प्राकृतिक भाषा]] इनपुट पढ़ने के लिए किया गया था।<ref>{{cite magazine|title=Software that takes games seriously|url=https://books.google.com/books?id=RI51dkpbcGoC&pg=PA34|magazine=[[New Scientist]]|date=March 26, 1987|publisher=[[Reed Business Information]]|page=34|via=[[Google Books]]|url-status=live}}</ref>
सेगा ने 1986 में जापानी व्यापार के लिए जारी किए गए सेगा एआई कंप्यूटर के साथ उपयोग के लिए प्रोलॉग को प्रयुक्त किया। प्रोलॉग का उपयोग टच पैड के माध्यम से [[जापानी भाषा]] में [[प्राकृतिक भाषा]] इनपुट पढ़ने के लिए किया गया था।<ref>{{cite magazine|title=Software that takes games seriously|url=https://books.google.com/books?id=RI51dkpbcGoC&pg=PA34|magazine=[[New Scientist]]|date=March 26, 1987|publisher=[[Reed Business Information]]|page=34|via=[[Google Books]]|url-status=live}}</ref>




== सीमाएं ==
== सीमाएं ==
यद्यपि अनुसंधान और शिक्षा में प्रोलॉग का व्यापक रूप से उपयोग किया जाता है,{{Citation needed|date=June 2021}} प्रोलॉग और अन्य लॉजिक प्रोग्रामिंग भाषाओं का सामान्य रूप से कंप्यूटर उद्योग पर महत्वपूर्ण प्रभाव नहीं पड़ा है।<ref name="RealWorld">Logic programming for the real world. Zoltan Somogyi,  Fergus Henderson, Thomas Conway, Richard O'Keefe. Proceedings of the ILPS'95 Postconference Workshop on Visions for the Future of Logic Programming.</ref> अधिकांश अनुप्रयोग औद्योगिक मानकों से छोटे होते हैं, कोड की 100,000 से अधिक पंक्तियों के साथ।<ref name="RealWorld"/><ref name="The Prolog 1000 database">{{Cite web|url=http://www.faqs.org/faqs/prolog/resource-guide/part1/section-9.html|title=FAQ: Prolog Resource Guide 1/2 [Monthly posting]Section - [1-8] The Prolog 1000 Database|website=www.faqs.org}}</ref> बड़े पैमाने पर प्रोग्रामिंग को जटिल माना जाता है क्योंकि सभी प्रोलॉग कंपाइलर्स मॉड्यूल का समर्थन नहीं करते हैं, और प्रमुख प्रोलॉग कंपाइलर्स के मॉड्यूल सिस्टम के बीच संगतता समस्याएं हैं।<ref name="cs.kuleuven.ac.be"/>  कार्यान्वयन के दौरान प्रोलॉग कोड की पोर्टेबिलिटी भी एक समस्या रही है, लेकिन 2007 के बाद से हुए विकास का मतलब है: एडिनबर्ग/क्विंटस व्युत्पन्न प्रोलॉग कार्यान्वयन के परिवार के भीतर पोर्टेबिलिटी पोर्टेबल वास्तविक दुनिया अनुप्रयोगों को बनाए रखने की अनुमति देने के लिए पर्याप्त है।<ref>Jan Wielemaker and Vıtor Santos Costa: [http://www.swi-prolog.org/download/publications/porting.pdf Portability of Prolog programs: theory and case-studies]. [http://www.floc-conference.org/CICLOPS-WLPE-accepted.html CICLOPS-WLPE Workshop 2010] {{Webarchive|url=https://web.archive.org/web/20100716184811/http://www.floc-conference.org/CICLOPS-WLPE-accepted.html |date=2010-07-16 }}.</ref>
यद्यपि अनुसंधान और शिक्षा में प्रोलॉग का व्यापक रूप से उपयोग किया जाता है,{{Citation needed|date=June 2021}} प्रोलॉग और अन्य लॉजिक प्रोग्रामिंग भाषाओं का सामान्य रूप से कंप्यूटर उद्योग पर महत्वपूर्ण प्रभाव नहीं पड़ा है।<ref name="RealWorld">Logic programming for the real world. Zoltan Somogyi,  Fergus Henderson, Thomas Conway, Richard O'Keefe. Proceedings of the ILPS'95 Postconference Workshop on Visions for the Future of Logic Programming.</ref> अधिकांश अनुप्रयोग औद्योगिक मानकों से छोटे होते हैं, कोड की 100,000 से अधिक पंक्तियों के साथ।<ref name="RealWorld"/><ref name="The Prolog 1000 database">{{Cite web|url=http://www.faqs.org/faqs/prolog/resource-guide/part1/section-9.html|title=FAQ: Prolog Resource Guide 1/2 [Monthly posting]Section - [1-8] The Prolog 1000 Database|website=www.faqs.org}}</ref> बड़े पैमाने पर प्रोग्रामिंग को जटिल माना जाता है क्योंकि सभी प्रोलॉग कंपाइलर्स मॉड्यूल का समर्थन नहीं करते हैं, और प्रमुख प्रोलॉग कंपाइलर्स के मॉड्यूल प्रणाली के बीच संगतता समस्याएं हैं।<ref name="cs.kuleuven.ac.be"/>  कार्यान्वयन के समय प्रोलॉग कोड की पोर्टेबिलिटी भी एक समस्या रही है, लेकिन 2007 के बाद से हुए विकास का मतलब है: एडिनबर्ग/क्विंटस व्युत्पन्न प्रोलॉग कार्यान्वयन के परिवार के अन्दर पोर्टेबिलिटी पोर्टेबल वास्तविक विश्व अनुप्रयोगों को बनाए रखने की अनुमति देने के लिए पर्याप्त है।<ref>Jan Wielemaker and Vıtor Santos Costa: [http://www.swi-prolog.org/download/publications/porting.pdf Portability of Prolog programs: theory and case-studies]. [http://www.floc-conference.org/CICLOPS-WLPE-accepted.html CICLOPS-WLPE Workshop 2010] {{Webarchive|url=https://web.archive.org/web/20100716184811/http://www.floc-conference.org/CICLOPS-WLPE-accepted.html |date=2010-07-16 }}.</ref>
प्रोलॉग में विकसित सॉफ्टवेयर की पारंपरिक प्रोग्रामिंग भाषाओं की तुलना में उच्च प्रदर्शन दंड के लिए आलोचना की गई है। विशेष रूप से, प्रोलॉग की गैर-नियतात्मक मूल्यांकन रणनीति समस्याग्रस्त हो सकती है जब नियतात्मक संगणनाओं की प्रोग्रामिंग की जाती है, या जब भी गैर-नियतत्ववाद की परवाह नहीं करते हैं (जहां सभी संभावनाओं पर पीछे हटने के बजाय एक ही विकल्प बनाया जाता है)। वांछनीय प्रदर्शन प्राप्त करने के लिए कट्स और अन्य भाषा निर्माणों का उपयोग करना पड़ सकता है, जो प्रोलॉग के मुख्य आकर्षणों में से एक को नष्ट कर देता है, कार्यक्रमों को पीछे और आगे चलाने की क्षमता।<ref name="rethinking">{{cite conference |first1=Oleg |last1=Kiselyov |first2=Yukiyoshi |last2=Kameyama |title=Re-thinking Prolog |conference=Proc. 31st meeting of the Japan Society for Software Science and Technology |year=2014 |url=http://okmij.org/ftp/kakuritu/logic-programming.html#vs-prolog}}</ref>
 
प्रोलॉग विशुद्ध रूप से घोषणात्मक नहीं है: [[कट (तर्क प्रोग्रामिंग)]] जैसी संरचनाओं के कारण, इसे समझने के लिए प्रोलॉग प्रोग्राम की एक प्रक्रियात्मक रीडिंग की आवश्यकता होती है।<ref>{{citation|first=Torkel|last=Franzen|date=1994|url=http://dtai.cs.kuleuven.be/projects/ALP/newsletter/archive_93_96/comment/decl.html|title=Declarative vs procedural|journal=Association of Logic Programming|volume=7|issue=3}}</ref> प्रोलॉग प्रोग्राम में क्लॉज का क्रम महत्वपूर्ण है, क्योंकि भाषा की निष्पादन रणनीति इस पर निर्भर करती है।<ref>{{cite journal |title=Complexity and Expressive Power of Logic Programming |journal=ACM Computing Surveys |first1=Evgeny |last1=Dantsin |first2=Thomas |last2=Eiter |first3=Georg |last3=Gottlob |first4=Andrei |last4=Voronkov |year=2001 |volume=33 |issue=3 |pages=374–425 |doi=10.1145/502807.502810|citeseerx=10.1.1.616.6372 |s2cid=518049 }}</ref> अन्य लॉजिक प्रोग्रामिंग लैंग्वेज, जैसे कि [[Datalog]], वास्तव में घोषणात्मक हैं, लेकिन भाषा को प्रतिबंधित करती हैं। नतीजतन, कई व्यावहारिक प्रोलॉग प्रोग्राम विशुद्ध रूप से घोषणात्मक तर्क कार्यक्रमों के बजाय प्रोलॉग के गहराई-पहले खोज क्रम के अनुरूप लिखे गए हैं।<ref name="rethinking"/>
प्रोलॉग में विकसित सॉफ्टवेयर की पारंपरिक प्रोग्रामिंग भाषाओं की तुलना में उच्च प्रदर्शन दंड के लिए आलोचना की गई है। विशेष रूप से, प्रोलॉग की गैर-नियतात्मक मूल्यांकन रणनीति समस्याग्रस्त हो सकती है जब नियतात्मक संगणनाओं की प्रोग्रामिंग की जाती है, या जब भी गैर-नियतत्ववाद की परवाह नहीं करते हैं (जहां सभी संभावनाओं पर पीछे हटने के अतिरिक्त एक ही विकल्प बनाया जाता है)। वांछनीय प्रदर्शन प्राप्त करने के लिए कट्स और अन्य भाषा निर्माणों का उपयोग करना पड़ सकता है, जो प्रोलॉग के मुख्य आकर्षणों में से एक को नष्ट कर देता है, कार्यक्रमों को पीछे और आगे चलाने की क्षमता।<ref name="rethinking">{{cite conference |first1=Oleg |last1=Kiselyov |first2=Yukiyoshi |last2=Kameyama |title=Re-thinking Prolog |conference=Proc. 31st meeting of the Japan Society for Software Science and Technology |year=2014 |url=http://okmij.org/ftp/kakuritu/logic-programming.html#vs-prolog}}</ref>
 
प्रोलॉग विशुद्ध रूप से घोषणात्मक नहीं है: [[कट (तर्क प्रोग्रामिंग)]] जैसी संरचनाओं के कारण, इसे समझने के लिए प्रोलॉग प्रोग्राम की एक प्रक्रियात्मक रीडिंग की आवश्यकता होती है।<ref>{{citation|first=Torkel|last=Franzen|date=1994|url=http://dtai.cs.kuleuven.be/projects/ALP/newsletter/archive_93_96/comment/decl.html|title=Declarative vs procedural|journal=Association of Logic Programming|volume=7|issue=3}}</ref> प्रोलॉग प्रोग्राम में क्लॉज का क्रम महत्वपूर्ण है, क्योंकि भाषा की निष्पादन रणनीति इस पर निर्भर करती है।<ref>{{cite journal |title=Complexity and Expressive Power of Logic Programming |journal=ACM Computing Surveys |first1=Evgeny |last1=Dantsin |first2=Thomas |last2=Eiter |first3=Georg |last3=Gottlob |first4=Andrei |last4=Voronkov |year=2001 |volume=33 |issue=3 |pages=374–425 |doi=10.1145/502807.502810|citeseerx=10.1.1.616.6372 |s2cid=518049 }}</ref> अन्य लॉजिक प्रोग्रामिंग भाषा, जैसे कि [[Datalog|डेटालॉग]], वास्तव में घोषणात्मक हैं, लेकिन भाषा को प्रतिबंधित करती हैं। परिणामस्वरूप, कई व्यावहारिक प्रोलॉग प्रोग्राम विशुद्ध रूप से घोषणात्मक तर्क कार्यक्रमों के अतिरिक्त प्रोलॉग के गहराई-पहले खोज क्रम के अनुरूप लिखे गए हैं।<ref name="rethinking" />
 




== एक्सटेंशन ==
== एक्सटेंशन ==
तर्क प्रोग्रामिंग क्षमताओं को कई दिशाओं में विस्तारित करने के लिए प्रोलॉग से विभिन्न कार्यान्वयन विकसित किए गए हैं। इनमें टाइप सिस्टम, मोड्स, [[बाधा तर्क प्रोग्रामिंग]] (CLP), ऑब्जेक्ट-ओरिएंटेड लॉजिक प्रोग्रामिंग (OOLP), कॉन्करेंसी, [[रैखिक तर्क]] (LLP), फंक्शनल और [[उच्च क्रम तर्क]] प्रोग्रामिंग क्षमताएं, साथ ही [[ज्ञानधार]] के साथ इंटरऑपरेबिलिटी शामिल हैं:
तर्क प्रोग्रामिंग क्षमताओं को कई दिशाओं में विस्तारित करने के लिए प्रोलॉग से विभिन्न कार्यान्वयन विकसित किए गए हैं। इनमें टाइप प्रणाली, मोड्स, [[बाधा तर्क प्रोग्रामिंग]] (CLP), ऑब्जेक्ट-ओरिएंटेड लॉजिक प्रोग्रामिंग (OOLP), कॉन्करेंसी, [[रैखिक तर्क]] (LLP), फंक्शनल और [[उच्च क्रम तर्क]] प्रोग्रामिंग क्षमताएं, साथ ही [[ज्ञानधार]] के साथ इंटरऑपरेबिलिटी सम्मिलित हैं:


=== प्रकार ===
=== प्रकार ===
प्रोलॉग एक अप्रकाशित भाषा है। 1980 के दशक के प्रकारों को पेश करने का प्रयास,<ref>{{Cite journal |  doi = 10.1016/0004-3702(84)90017-1 | last1 = Mycroft | first1 = A. | last2 = O'Keefe | first2 = R. A. | title = A polymorphic type system for prolog | journal = Artificial Intelligence | volume = 23 | issue = 3 | pages = 295 | year = 1984}}</ref><ref>{{cite book |author=Pfenning, Frank |title=Types in logic programming |publisher=MIT Press |location=Cambridge, Massachusetts |year=1992 |isbn=978-0-262-16131-2 }}</ref> और 2008 तक अभी भी प्रोलॉग को प्रकारों के साथ विस्तारित करने का प्रयास किया जा रहा है।<ref>{{Cite book | last1 =  Schrijvers | first1 = Tom | last2 = Santos Costa | first2 = Vitor | last3 = Wielemaker | first3 = Jan | last4 = Demoen | first4 = Bart | year = 2008 | chapter = Towards Typed Prolog | editor1=Maria Garcia de la Banda | editor2=Enrico Pontelli  | title=Logic programming : 24th international conference, ICLP 2008, Udine, Italy, December 9-13, 2008 : proceedings | series = Lecture Notes in Computer Science | volume = 5366 | pages = 693–697 | doi = 10.1007/978-3-540-89982-2_59 | isbn = 9783540899822| chapter-url = https://lirias.kuleuven.be/handle/123456789/197561 }}</ref> प्रकार की जानकारी न केवल प्रकार की सुरक्षा के लिए उपयोगी है बल्कि प्रोलॉग प्रोग्राम के बारे में तर्क करने के लिए भी उपयोगी है।{{Cite journal |  doi = 10.1007/BF01213601 | last1 = Apt | first1 = K. R. | last2 = Marchiori | first2 = E. | title = प्रोलॉग प्रोग्राम के बारे में तर्क: मोड से प्रकार से अभिकथन तक| journal = Formal Aspects of Computing | volume = 6 |  issue = S1 | pages = 743 | year = 1994| url = http://www.cwi.nl/~apt/am.ps | citeseerx = 10.1.1.57.395 | s2cid = 12235465 }}</रेफरी>
प्रोलॉग एक अप्रकाशित भाषा है। 1980 के दशक के प्रकारों को प्रस्तुत करने का प्रयास,<ref>{{Cite journal |  doi = 10.1016/0004-3702(84)90017-1 | last1 = Mycroft | first1 = A. | last2 = O'Keefe | first2 = R. A. | title = A polymorphic type system for prolog | journal = Artificial Intelligence | volume = 23 | issue = 3 | pages = 295 | year = 1984}}</ref><ref>{{cite book |author=Pfenning, Frank |title=Types in logic programming |publisher=MIT Press |location=Cambridge, Massachusetts |year=1992 |isbn=978-0-262-16131-2 }}</ref> और 2008 तक अभी भी प्रोलॉग को प्रकारों के साथ विस्तारित करने का प्रयास किया जा रहा है।<ref>{{Cite book | last1 =  Schrijvers | first1 = Tom | last2 = Santos Costa | first2 = Vitor | last3 = Wielemaker | first3 = Jan | last4 = Demoen | first4 = Bart | year = 2008 | chapter = Towards Typed Prolog | editor1=Maria Garcia de la Banda | editor2=Enrico Pontelli  | title=Logic programming : 24th international conference, ICLP 2008, Udine, Italy, December 9-13, 2008 : proceedings | series = Lecture Notes in Computer Science | volume = 5366 | pages = 693–697 | doi = 10.1007/978-3-540-89982-2_59 | isbn = 9783540899822| chapter-url = https://lirias.kuleuven.be/handle/123456789/197561 }}</ref> प्रकार की जानकारी न केवल प्रकार की सुरक्षा के लिए उपयोगी है बल्कि प्रोलॉग प्रोग्राम के बारे में तर्क करने के लिए भी उपयोगी है।{{Cite journal |  doi = 10.1007/BF01213601 | last1 = Apt | first1 = K. R. | last2 = Marchiori | first2 = E. | title = प्रोलॉग प्रोग्राम के बारे में तर्क: मोड से प्रकार से अभिकथन तक| journal = Formal Aspects of Computing | volume = 6 |  issue = S1 | pages = 743 | year = 1994| url = http://www.cwi.nl/~apt/am.ps | citeseerx = 10.1.1.57.395 | s2cid = 12235465 }}</रेफरी>


=== मोड ===
=== मोड ===
Line 396: Line 442:
| Not specified
| Not specified
|}
|}
प्रोलॉग का वाक्य-विन्यास यह निर्दिष्ट नहीं करता है कि विधेय के कौन से तर्क इनपुट हैं और कौन से आउटपुट हैं।<ref name="craft">{{cite book |author=O'Keefe, Richard A. |title=The craft of Prolog |publisher=MIT Press |location=Cambridge, Massachusetts |year=1990 |isbn=978-0-262-15039-2 }}</ref> हालाँकि, यह जानकारी महत्वपूर्ण है और यह अनुशंसा की जाती है कि इसे टिप्पणियों में शामिल किया जाए।<ref>{{cite arXiv |title= Coding guidelines for Prolog |date=2010 |eprint= 0911.2899 |author1= Michael Covington |author2= Roberto Bagnara |author3= Richard O'Keefe |author4= Jan Wielemaker |author5= Simon Price |display-authors= 2 |class= cs.PL}}</ref> प्रोलॉग प्रोग्राम के बारे में तर्क करते समय मोड मूल्यवान जानकारी प्रदान करते हैं<ref name= cite doi|10.1007/BF01213601 /> और निष्पादन में तेजी लाने के लिए भी इसका उपयोग किया जा सकता है।<ref>{{Cite book |doi= 10.1007/BFb0014976 |last1= Roy |first1= P. |last2= Demoen |first2= B. |isbn= 978-3-540-17611-4 |last3= Willems |first3= Y. D. |chapter= Improving the execution speed of compiled Prolog with modes, clause selection, and determinism |title= Tapsoft '87 |series= Lecture Notes in Computer Science |volume= 250 |pages= [https://archive.org/details/tapsoft87proceed0000inte/page/111 111] |year= 1987 |chapter-url= https://archive.org/details/tapsoft87proceed0000inte/page/111 }}</ref>
प्रोलॉग का वाक्य-विन्यास यह निर्दिष्ट नहीं करता है कि विधेय के कौन से तर्क इनपुट हैं और कौन से आउटपुट हैं।<ref name="craft">{{cite book |author=O'Keefe, Richard A. |title=The craft of Prolog |publisher=MIT Press |location=Cambridge, Massachusetts |year=1990 |isbn=978-0-262-15039-2 }}</ref> हालाँकि, यह जानकारी महत्वपूर्ण है और यह अनुशंसा की जाती है कि इसे टिप्पणियों में सम्मिलित किया जाए।<ref>{{cite arXiv |title= Coding guidelines for Prolog |date=2010 |eprint= 0911.2899 |author1= Michael Covington |author2= Roberto Bagnara |author3= Richard O'Keefe |author4= Jan Wielemaker |author5= Simon Price |display-authors= 2 |class= cs.PL}}</ref> प्रोलॉग प्रोग्राम के बारे में तर्क करते समय मोड मूल्यवान जानकारी प्रदान करते हैं<ref name= cite doi|10.1007/BF01213601 /> और निष्पादन में तेजी लाने के लिए भी इसका उपयोग किया जा सकता है।<ref>{{Cite book |doi= 10.1007/BFb0014976 |last1= Roy |first1= P. |last2= Demoen |first2= B. |isbn= 978-3-540-17611-4 |last3= Willems |first3= Y. D. |chapter= Improving the execution speed of compiled Prolog with modes, clause selection, and determinism |title= Tapsoft '87 |series= Lecture Notes in Computer Science |volume= 250 |pages= [https://archive.org/details/tapsoft87proceed0000inte/page/111 111] |year= 1987 |chapter-url= https://archive.org/details/tapsoft87proceed0000inte/page/111 }}</ref>




=== बाधाएं ===
=== बाधाएं ===
बाधा तर्क प्रोग्रामिंग बाधा संतुष्टि से अवधारणाओं को शामिल करने के लिए प्रोलॉग का विस्तार करती है।<ref>{{Cite journal |doi= 10.1016/0743-1066(94)90033-7 |last1= Jaffar |first1= J. |title= Constraint logic programming: a survey |journal= The Journal of Logic Programming |volume= 19–20 |pages = 503–581 |year= 1994|doi-access= free }}</ref><ref>{{cite journal
बाधा तर्क प्रोग्रामिंग बाधा संतुष्टि से अवधारणाओं को सम्मिलित करने के लिए प्रोलॉग का विस्तार करती है।<ref>{{Cite journal |doi= 10.1016/0743-1066(94)90033-7 |last1= Jaffar |first1= J. |title= Constraint logic programming: a survey |journal= The Journal of Logic Programming |volume= 19–20 |pages = 503–581 |year= 1994|doi-access= free }}</ref><ref>{{cite journal
| first=Alain
| first=Alain
| last = Colmerauer
| last = Colmerauer
Line 406: Line 452:
| journal=Byte
| journal=Byte
| volume= August |year=1987
| volume= August |year=1987
}}</ref> एक बाधा तर्क कार्यक्रम खंडों के शरीर में बाधाओं की अनुमति देता है, जैसे कि: <code>A(X,Y) :- X+Y>0.</code> यह बड़े पैमाने पर दहनशील अनुकूलन समस्याओं के अनुकूल है<ref>{{Cite book | doi = 10.1007/3-540-45628-7_19 | last1 = Wallace | first1 = M. | chapter = Constraint Logic Programming | isbn = 978-3540456285 | title = Computational Logic: Logic Programming and Beyond | series = Lecture Notes in Computer Science | volume = 2407 | pages = 512–556 | year = 2002}}</ref> और इस प्रकार स्वचालित टाइम-टेबलिंग और उत्पादन शेड्यूलिंग जैसे औद्योगिक सेटिंग्स में अनुप्रयोगों के लिए उपयोगी है। अधिकांश प्रोलॉग सिस्टम परिमित डोमेन के लिए कम से कम एक बाधा सॉल्वर के साथ शिप करते हैं, और अक्सर तर्कसंगत संख्याओं जैसे अन्य डोमेन के लिए सॉल्वर के साथ भी।
}}</ref> एक बाधा तर्क कार्यक्रम खंडों के शरीर में बाधाओं की अनुमति देता है, जैसे कि: <code>A(X,Y) :- X+Y>0.</code> यह बड़े पैमाने पर दहनशील अनुकूलन समस्याओं के अनुकूल है<ref>{{Cite book | doi = 10.1007/3-540-45628-7_19 | last1 = Wallace | first1 = M. | chapter = Constraint Logic Programming | isbn = 978-3540456285 | title = Computational Logic: Logic Programming and Beyond | series = Lecture Notes in Computer Science | volume = 2407 | pages = 512–556 | year = 2002}}</ref> और इस प्रकार स्वचालित टाइम-टेबलिंग और उत्पादन शेड्यूलिंग जैसे औद्योगिक सेटिंग्स में अनुप्रयोगों के लिए उपयोगी है। अधिकांश प्रोलॉग प्रणाली परिमित डोमेन के लिए कम से कम एक बाधा सॉल्वर के साथ शिप करते हैं, और अक्सर तर्कसंगत संख्याओं जैसे अन्य डोमेन के लिए सॉल्वर के साथ भी।


=== ऑब्जेक्ट-ओरिएंटेशन ===
=== ऑब्जेक्ट-ओरिएंटेशन ===
[[फ्लोरा-2]] -2 एक वस्तु-उन्मुख ज्ञान प्रतिनिधित्व और तर्क प्रणाली है जो [[एफ तर्क]] पर आधारित है और इसमें HiLog, लेनदेन तर्क और दोषपूर्ण तर्क शामिल है।
[[फ्लोरा-2]] -2 एक वस्तु-उन्मुख ज्ञान प्रतिनिधित्व और तर्क प्रणाली है जो [[एफ तर्क]] पर आधारित है और इसमें HiLog, लेनदेन तर्क और दोषपूर्ण तर्क सम्मिलित है।


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


[[परत]] एडसीएएडी, एडिनबर्ग विश्वविद्यालय के मार्गरेट मैकडॉगल द्वारा प्रोलॉग के लिए एक छोटा, पोर्टेबल, ऑब्जेक्ट-ओरिएंटेड एक्सटेंशन है।
[[परत]] एडसीएएडी, एडिनबर्ग विश्वविद्यालय के मार्गरेट मैकडॉगल द्वारा प्रोलॉग के लिए एक छोटा, पोर्टेबल, ऑब्जेक्ट-ओरिएंटेड एक्सटेंशन है।
Line 417: Line 463:
ओब्जॉग सीएनआरएस, मार्सिले, फ्रांस से वस्तुओं और प्रोलॉग II के संयोजन वाली एक फ्रेम-आधारित भाषा थी।
ओब्जॉग सीएनआरएस, मार्सिले, फ्रांस से वस्तुओं और प्रोलॉग II के संयोजन वाली एक फ्रेम-आधारित भाषा थी।


Prolog++ को Logic Programming Associates द्वारा विकसित किया गया था और पहली बार 1989 में MS-DOS PC के लिए जारी किया गया था। अन्य प्लेटफार्मों के लिए समर्थन जोड़ा गया था, और एक दूसरा संस्करण 1995 में जारी किया गया था। क्रिस मॉस द्वारा प्रोलॉग ++ के बारे में एक पुस्तक एडिसन-वेस्ली द्वारा 1994 में प्रकाशित की गई थी।
प्रोलॉग++ को Logic Programming Associates द्वारा विकसित किया गया था और पहली बार 1989 में MS-DOS PC के लिए जारी किया गया था। अन्य प्लेटफार्मों के लिए समर्थन जोड़ा गया था, और एक दूसरा संस्करण 1995 में जारी किया गया था। क्रिस मॉस द्वारा प्रोलॉग ++ के बारे में एक पुस्तक एडिसन-वेस्ली द्वारा 1994 में प्रकाशित की गई थी।


विज़ुअल प्रोलॉग एक बहु-प्रतिमान भाषा है जिसमें इंटरफेस, कक्षाएं, कार्यान्वयन और ऑब्जेक्ट एक्सप्रेशन हैं।
विज़ुअल प्रोलॉग एक बहु-प्रतिमान भाषा है जिसमें इंटरफेस, कक्षाएं, कार्यान्वयन और ऑब्जेक्ट एक्सप्रेशन हैं।


=== ग्राफिक्स ===
=== ग्राफिक्स ===
प्रोलॉग सिस्टम जो [[ग्राफिक्स लाइब्रेरी]] प्रदान करते हैं वे हैं SWI-Prolog,<ref>{{Cite web|url=https://www.swi-prolog.org/packages/xpce/|title=XPCE: the SWI-Prolog native GUI library|website=www.swi-prolog.org}}</ref> विजुअल प्रोलॉग, लॉजिक प्रोग्रामिंग एसोसिएट्स | विन-प्रोलॉग और बी-प्रोलॉग।
प्रोलॉग प्रणाली जो [[ग्राफिक्स लाइब्रेरी]] प्रदान करते हैं वे हैं SWI-प्रोलॉग,<ref>{{Cite web|url=https://www.swi-prolog.org/packages/xpce/|title=XPCE: the SWI-Prolog native GUI library|website=www.swi-prolog.org}}</ref> विजुअल प्रोलॉग, लॉजिक प्रोग्रामिंग एसोसिएट्स | विन-प्रोलॉग और बी-प्रोलॉग।


=== संगामिति ===
=== संगामिति ===
Line 429: Line 475:


=== वेब प्रोग्रामिंग ===
=== वेब प्रोग्रामिंग ===
कुछ प्रोलॉग कार्यान्वयन, विशेष रूप से विज़ुअल प्रोलॉग, एसडब्ल्यूआई-प्रोलॉग और सीआओ (प्रोग्रामिंग भाषा), वेब प्रोटोकॉल, [[एचटीएमएल]] और एक्सएमएल के समर्थन के साथ सर्वर-साइड वेब प्रोग्रामिंग का समर्थन करते हैं।<ref>{{Cite journal| journal = Theory and Practice of Logic Programming| volume = 8| year = 2008| doi = 10.1017/S1471068407003237| title = SWI-Prolog and the web | first3 = L. | first1 = J.| last2 = Huang | first2 = Z.| last1 = Wielemaker| last3 = Van Der Meij| issue = 3| pages = 363| s2cid = 5404048| url = https://pure.uva.nl/ws/files/4221287/58604_285112.pdf}}</ref> सिमेंटिक वेब प्रारूपों जैसे कि संसाधन विवरण फ्रेमवर्क और वेब ओन्टोलॉजी लैंग्वेज का समर्थन करने के लिए एक्सटेंशन भी हैं।<ref>{{Citation
कुछ प्रोलॉग कार्यान्वयन, विशेष रूप से विज़ुअल प्रोलॉग, एसडब्ल्यूआई-प्रोलॉग और सीआओ (प्रोग्रामिंग भाषा), वेब प्रोटोकॉल, [[एचटीएमएल]] और एक्सएमएल के समर्थन के साथ सर्वर-साइड वेब प्रोग्रामिंग का समर्थन करते हैं।<ref>{{Cite journal| journal = Theory and Practice of Logic Programming| volume = 8| year = 2008| doi = 10.1017/S1471068407003237| title = SWI-Prolog and the web | first3 = L. | first1 = J.| last2 = Huang | first2 = Z.| last1 = Wielemaker| last3 = Van Der Meij| issue = 3| pages = 363| s2cid = 5404048| url = https://pure.uva.nl/ws/files/4221287/58604_285112.pdf}}</ref> सिमेंटिक वेब प्रारूपों जैसे कि संसाधन विवरण फ्रेमवर्क और वेब ओन्टोलॉजी भाषा का समर्थन करने के लिए एक्सटेंशन भी हैं।<ref>{{Citation
| author = Jan Wielemaker and Michiel Hildebrand and Jacco van Ossenbruggen
| author = Jan Wielemaker and Michiel Hildebrand and Jacco van Ossenbruggen
| title = Using {Prolog} as the fundament for applications on the semantic web
| title = Using {Prolog} as the fundament for applications on the semantic web
Line 441: Line 487:
| editor = S. Heymans |editor2=A. Polleres |editor3=E. Ruckhaus |editor4=D. Pearse |editor5=G. Gupta
| editor = S. Heymans |editor2=A. Polleres |editor3=E. Ruckhaus |editor4=D. Pearse |editor5=G. Gupta
| url = http://ftp.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-287/paper_1.pdf
| url = http://ftp.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-287/paper_1.pdf
}}</ref><ref>[http://ceur-ws.org/Vol-529/owled2009_submission_43.pdf Processing OWL2 Ontologies using Thea: An Application of Logic Programming]. Vangelis Vassiliadis, Jan Wielemaker and Chris Mungall. Proceedings of the 5th International Workshop on OWL: Experiences and Directions (OWLED 2009), Chantilly, VA, United States, October 23–24, 2009</ref> प्रोलॉग को [[ग्राहक की ओर]] भाषा के रूप में भी सुझाया गया है।<ref>{{Cite journal| last1 = Loke | first1 = S. W.| last2 = Davison | first2 = A.| title = Secure Prolog-based mobile code| journal = Theory and Practice of Logic Programming| volume = 1| issue = 3| pages = 321| year = 2001| doi = 10.1017/S1471068401001211| citeseerx = 10.1.1.58.6610| arxiv = cs/0406012| s2cid = 11754347}}</ref> इसके अलावा विज़ुअल प्रोलॉग [[JSON-RPC]] और Websockets का समर्थन करता है।
}}</ref><ref>[http://ceur-ws.org/Vol-529/owled2009_submission_43.pdf Processing OWL2 Ontologies using Thea: An Application of Logic Programming]. Vangelis Vassiliadis, Jan Wielemaker and Chris Mungall. Proceedings of the 5th International Workshop on OWL: Experiences and Directions (OWLED 2009), Chantilly, VA, United States, October 23–24, 2009</ref> प्रोलॉग को [[ग्राहक की ओर]] भाषा के रूप में भी सुझाया गया है।<ref>{{Cite journal| last1 = Loke | first1 = S. W.| last2 = Davison | first2 = A.| title = Secure Prolog-based mobile code| journal = Theory and Practice of Logic Programming| volume = 1| issue = 3| pages = 321| year = 2001| doi = 10.1017/S1471068401001211| citeseerx = 10.1.1.58.6610| arxiv = cs/0406012| s2cid = 11754347}}</ref> इसके अतिरिक्त विज़ुअल प्रोलॉग [[JSON-RPC]] और Websockets का समर्थन करता है।


=== एडोब फ्लैश ===
=== एडोब फ्लैश ===
Line 449: Line 495:
* एफ-लॉजिक ज्ञान प्रतिनिधित्व के लिए फ्रेम/ऑब्जेक्ट्स के साथ प्रोलॉग का विस्तार करता है।
* एफ-लॉजिक ज्ञान प्रतिनिधित्व के लिए फ्रेम/ऑब्जेक्ट्स के साथ प्रोलॉग का विस्तार करता है।
* लेन-देन तर्क राज्य-बदलते अद्यतन ऑपरेटरों के एक तार्किक सिद्धांत के साथ प्रोलॉग का विस्तार करता है। इसमें एक मॉडल-सैद्धांतिक और प्रक्रियात्मक शब्दार्थ दोनों हैं।
* लेन-देन तर्क राज्य-बदलते अद्यतन ऑपरेटरों के एक तार्किक सिद्धांत के साथ प्रोलॉग का विस्तार करता है। इसमें एक मॉडल-सैद्धांतिक और प्रक्रियात्मक शब्दार्थ दोनों हैं।
* ओडब्ल्यू प्रोलॉग [[ओ ओ प्रोलॉग]] में ग्राफिक्स और इंटरफेस की कमी का जवाब देने के लिए बनाया गया है।
* ओडब्ल्यू प्रोलॉग [[ओ ओ प्रोलॉग]] में ग्राफिक्स और इंटरफेस की कमी का उत्तर देने के लिए बनाया गया है।


== अन्य भाषाओं के लिए इंटरफेस ==
== अन्य भाषाओं के लिए इंटरफेस ==
फ्रेमवर्क मौजूद हैं जो प्रोलॉग और अन्य भाषाओं के बीच पुल कर सकते हैं:
फ्रेमवर्क मौजूद हैं जो प्रोलॉग और अन्य भाषाओं के बीच पुल कर सकते हैं:
* [https://www.lpa.co.uk/int.htm LPA इंटेलिजेंस सर्वर] C के भीतर [https://www.lpa.co.uk/win.htm LPA Prolog for Windows] को एम्बेड करने की अनुमति देता है, सी #, सी ++, जावा, वीबी, डेल्फी, नेट, लुआ, पायथन और अन्य भाषाएं। यह समर्पित स्ट्रिंग डेटा-प्रकार का शोषण करता है जो एलपीए प्रोलॉग प्रदान करता है
* [https://www.lpa.co.uk/int.htm LPA इंटेलिजेंस सर्वर] C के अन्दर [https://www.lpa.co.uk/win.htm LPA प्रोलॉग for Windows] को एम्बेड करने की अनुमति देता है, सी #, सी ++, जावा, वीबी, डेल्फी, नेट, लुआ, पायथन और अन्य भाषाएं। यह समर्पित स्ट्रिंग डेटा-प्रकार का शोषण करता है जो एलपीए प्रोलॉग प्रदान करता है
* लॉजिक सर्वर एपीआई सी, सी++, जावा, वीबी, डेल्फी, .NET और किसी भी भाषा/पर्यावरण में प्रोलॉग के विस्तार और एम्बेडिंग दोनों की अनुमति देता है जो .dll या .so को कॉल कर सकता है। यह अमजी के लिए लागू है! प्रोलॉग [http://www.amzi.com/ Amzi! प्रोलॉग + लॉजिक सर्वर] लेकिन एपीआई विनिर्देश किसी भी कार्यान्वयन के लिए उपलब्ध कराया जा सकता है।
* लॉजिक सर्वर एपीआई सी, सी++, जावा, वीबी, डेल्फी, .NET और किसी भी भाषा/पर्यावरण में प्रोलॉग के विस्तार और एम्बेडिंग दोनों की अनुमति देता है जो .dll या .so को कॉल कर सकता है। यह अमजी के लिए प्रयुक्त है! प्रोलॉग [http://www.amzi.com/ Amzi! प्रोलॉग + लॉजिक सर्वर] लेकिन एपीआई विनिर्देश किसी भी कार्यान्वयन के लिए उपलब्ध कराया जा सकता है।
* [https://jpl7.org/ JPL] एक द्वि-दिशात्मक Java Prolog ब्रिज है जो डिफ़ॉल्ट रूप से SWI-Prolog के साथ आता है, जिससे Java और Prolog एक दूसरे को (रिकर्सिवली) कॉल कर सकते हैं। यह अच्छा संगामिति समर्थन के लिए जाना जाता है और सक्रिय विकास के अधीन है।
* [https://jpl7.org/ JPL] एक द्वि-दिशात्मक जावा प्रोलॉग ब्रिज है जो डिफ़ॉल्ट रूप से SWI-प्रोलॉग के साथ आता है, जिससे जावा और प्रोलॉग एक दूसरे को (रिकर्सिवली) कॉल कर सकते हैं। यह अच्छा संगामिति समर्थन के लिए जाना जाता है और सक्रिय विकास के अधीन है।
* [https://web.archive.org/web/20050406192103/http://www.declarativa.com/InterProlog/ InterProlog], [[जावा मंच]] और प्रोलॉग के बीच एक प्रोग्रामिंग लाइब्रेरी ब्रिज, द्वि-दिशात्मक विधेय/विधि कॉलिंग के बीच कार्यान्वयन दोनों भाषाएँ। जावा ऑब्जेक्ट्स को प्रोलॉग शर्तों में मैप किया जा सकता है और इसके विपरीत। प्रोलॉग लेयर में लॉजिक प्रोसेसिंग को छोड़ते हुए जावा में ग्राफिकल यूजर इंटरफेस और अन्य कार्यक्षमता के विकास की अनुमति देता है। 2013 के लिए नियोजित एसडब्ल्यूआई-प्रोलॉग और वाईएपी (प्रोलॉग) के समर्थन के साथ एक्सएसबी का समर्थन करता है।
* [https://web.archive.org/web/20050406192103/http://www.declarativa.com/InterProlog/ इंटरप्रोलॉग], [[जावा मंच]] और प्रोलॉग के बीच एक प्रोग्रामिंग लाइब्रेरी ब्रिज, द्वि-दिशात्मक विधेय/विधि कॉलिंग के बीच कार्यान्वयन दोनों भाषाएँ। जावा ऑब्जेक्ट्स को प्रोलॉग नियमो में मैप किया जा सकता है और इसके विपरीत। प्रोलॉग लेयर में लॉजिक प्रोसेसिंग को छोड़ते हुए जावा में ग्राफिकल यूजर इंटरफेस और अन्य कार्यक्षमता के विकास की अनुमति देता है। 2013 के लिए नियोजित एसडब्ल्यूआई-प्रोलॉग और वाईएपी (प्रोलॉग) के समर्थन के साथ एक्सएसबी का समर्थन करता है।
* प्रोवा जावा, एजेंट मैसेजिंग और प्रतिक्रिया नियमों के साथ देशी सिंटैक्स एकीकरण प्रदान करता है। Prova खुद को मिडलवेयर के लिए नियम-आधारित स्क्रिप्टिंग (RBS) सिस्टम के रूप में रखता है। अनिवार्य प्रोग्रामिंग और घोषणात्मक प्रोग्रामिंग के संयोजन में भाषा नई जमीन बनाती है।
* प्रोवा जावा, एजेंट मैसेजिंग और प्रतिक्रिया नियमों के साथ देशी सिंटैक्स एकीकरण प्रदान करता है। Prova स्वयं को मिडलवेयर के लिए नियम-आधारित स्क्रिप्टिंग (आरबीएस) प्रणाली के रूप में रखता है। अनिवार्य प्रोग्रामिंग और घोषणात्मक प्रोग्रामिंग के संयोजन में भाषा नई जमीन बनाती है।
* [https://web.archive.org/web/20110221120826/http://www.igormaznitsa.com/projects/prol/index.html PROL] जावा के लिए एक एम्बेड करने योग्य प्रोलॉग इंजन। इसमें एक छोटा आईडीई और कुछ पुस्तकालय शामिल हैं।
* [https://web.archive.org/web/20110221120826/http://www.igormaznitsa.com/projects/prol/index.html PROL] जावा के लिए एक एम्बेड करने योग्य प्रोलॉग इंजन। इसमें एक छोटा आईडीई और कुछ पुस्तकालय सम्मिलित हैं।
* [https://www.gnu.org/software/gnuprologjava/ जावा के लिए GNU प्रोलॉग] जावा लाइब्रेरी के रूप में ISO प्रोलॉग का कार्यान्वयन है (gnu.prolog)
* [https://www.gnu.org/software/gnuprologjava/ जावा के लिए GNU प्रोलॉग] जावा लाइब्रेरी के रूप में ISO प्रोलॉग का कार्यान्वयन है (gnu.प्रोलॉग)
* Ciao (प्रोग्रामिंग लैंग्वेज) C, C++, Java और रिलेशनल डेटाबेस को इंटरफेस प्रदान करता है।
* Ciao (प्रोग्रामिंग भाषा) C, C++, जावा और रिलेशनल डेटाबेस को इंटरफेस प्रदान करता है।
* [http://sourceforge.net/projects/cs-prolog/ C#-Prolog] एक प्रोलॉग दुभाषिया है जिसे (प्रबंधित) C# में लिखा गया है। C# प्रोग्राम में आसानी से एकीकृत किया जा सकता है। विशेषताएँ: विश्वसनीय और काफी तेज़ दुभाषिया, कमांड लाइन इंटरफ़ेस, विंडोज-इंटरफ़ेस, बिल्ट-इन DCG, XML-predicates, SQL-predicates, विस्तारणीय। संपूर्ण स्रोत कोड उपलब्ध है, जिसमें एक पार्सर जनरेटर भी शामिल है जिसका उपयोग विशेष उद्देश्य एक्सटेंशन जोड़ने के लिए किया जा सकता है।
* [http://sourceforge.net/projects/cs-prolog/ C#-प्रोलॉग] एक प्रोलॉग दुभाषिया है जिसे (प्रबंधित) C# में लिखा गया है। C# प्रोग्राम में आसानी से एकीकृत किया जा सकता है। विशेषताएँ: विश्वसनीय और काफी तेज़ दुभाषिया, कमांड लाइन इंटरफ़ेस, विंडोज-इंटरफ़ेस, बिल्ट-इन DCG, XML-predicates, SQL-predicates, विस्तारणीय। संपूर्ण स्रोत कोड उपलब्ध है, जिसमें एक पार्सर जनरेटर भी सम्मिलित है जिसका उपयोग विशेष उद्देश्य एक्सटेंशन जोड़ने के लिए किया जा सकता है।
* [https://github.com/Trismegiste/WamBundle PHP के लिए वॉरेन सार मशीन] PHP 5.3 में एक प्रोलॉग कंपाइलर और दुभाषिया। एक पुस्तकालय जिसे स्टैंडअलोन या सिम्फनी 2.1 ढांचे के भीतर इस्तेमाल किया जा सकता है जिसे जावा में [http://stefan.buettcher.org/ Stephan Buettcher's] कार्य से अनुवादित किया गया था जिसे [यहाँ पाया जा सकता है] {{URL|http://stefan.buettcher.org/cs/wam/index.html}}]
* [https://github.com/Trismegiste/WamBundle PHP के लिए वॉरेन सार मशीन] PHP 5.3 में एक प्रोलॉग कंपाइलर और दुभाषिया। एक पुस्तकालय जिसे स्टैंडअलोन या सिम्फनी 2.1 ढांचे के अन्दर उपयोग किया जा सकता है जिसे जावा में [http://stefan.buettcher.org/ Stephan Buettcher's] कार्य से अनुवादित किया गया था जिसे [यहाँ पाया जा सकता है] {{URL|http://stefan.buettcher.org/cs/wam/index.html}}]
* [https://web.archive.org/web/20190317003033/http://apice.unibo.it/xwiki/bin/view/Tuprolog/WebHome tuProlog] वितरित अनुप्रयोगों और बुनियादी ढांचे के लिए एक हल्का प्रोलॉग सिस्टम है, जानबूझकर एक न्यूनतम कोर के आसपास डिज़ाइन किया गया है, या तो वैधानिक रूप से या गतिशील रूप से विधेय के पुस्तकालयों को लोड / अनलोड करके कॉन्फ़िगर किया गया है। TuProlog मूल रूप से बहु-प्रतिमान प्रोग्रामिंग का समर्थन करता है, प्रोलॉग और मुख्यधारा की वस्तु-उन्मुख भाषाओं के बीच एक स्वच्छ, सहज एकीकरण मॉडल प्रदान करता है - जावा, tuProlog जावा संस्करण के लिए, और कोई भी .NET- आधारित भाषा (C#, F#..), tuProlog के लिए। नेट संस्करण।<ref>{{Cite web |url=http://apice.unibo.it/xwiki/bin/view/Tuprolog/WebHome |title=TuProlog @ UniBo |access-date=2019-06-08 |archive-url=https://web.archive.org/web/20190317003033/http://apice.unibo.it/xwiki/bin/view/Tuprolog/WebHome |archive-date=2019-03-17 |url-status=dead }}</ref>
* [https://web.archive.org/web/20190317003033/http://apice.unibo.it/xwiki/bin/view/Tuprolog/WebHome ट्यूप्रोलॉग] वितरित अनुप्रयोगों और बुनियादी ढांचे के लिए एक हल्का प्रोलॉग प्रणाली है, सविचार एक न्यूनतम कोर के आसपास डिज़ाइन किया गया है, या तो वैधानिक रूप से या गतिशील रूप से विधेय के पुस्तकालयों को लोड / अनलोड करके कॉन्फ़िगर किया गया है। ट्यूप्रोलॉग मूल रूप से बहु-प्रतिमान प्रोग्रामिंग का समर्थन करता है, प्रोलॉग और मुख्यधारा की वस्तु-उन्मुख भाषाओं के बीच एक स्वच्छ, सहज एकीकरण मॉडल प्रदान करता है - जावा, ट्यूप्रोलॉग जावा संस्करण के लिए, और कोई भी .NET- आधारित भाषा (C#, F#..), ट्यूप्रोलॉग के लिए। नेट संस्करण।<ref>{{Cite web |url=http://apice.unibo.it/xwiki/bin/view/Tuprolog/WebHome |title=TuProlog @ UniBo |access-date=2019-06-08 |archive-url=https://web.archive.org/web/20190317003033/http://apice.unibo.it/xwiki/bin/view/Tuprolog/WebHome |archive-date=2019-03-17 |url-status=dead }}</ref>




== इतिहास ==
== इतिहास ==
प्रोलॉग नाम फिलिप रसेल द्वारा संक्षिप्त नाम के रूप में चुना गया था{{lang|fr|programmation en logique}}([[तर्क]] में प्रोग्रामिंग के लिए फ्रेंच भाषा)। यह 1972 के आसपास एलेन कॉलमेरॉयर द्वारा फिलिप रसेल के साथ बनाया गया था, जो रॉबर्ट कोवाल्स्की की हॉर्न क्लॉज की प्रक्रियात्मक व्याख्या पर आधारित था। यह 1960 के दशक के अंत और 1970 के दशक के प्रारंभ में उत्तरी अमेरिका में प्रचलित ज्ञान के प्रक्रियात्मक प्रतिनिधित्व के साथ एक घोषणात्मक ज्ञान प्रतिनिधित्व भाषा के रूप में तर्क के उपयोग को समेटने की इच्छा से प्रेरित था। रॉबर्ट कोवाल्स्की के अनुसार, पहला प्रोलॉग सिस्टम 1972 में कोलमेरौएर और फिलिप रसेल द्वारा विकसित किया गया था।<ref name="Kowalski"/>प्रोलॉग का पहला कार्यान्वयन जेरार्ड बट्टानी और हेनरी मेलोनी द्वारा फोरट्रान में लिखा गया एक दुभाषिया था। डेविड एच.डी. वारेन इस दुभाषिया को एडिनबर्ग विश्वविद्यालय ले गए, और वहां एक वैकल्पिक फ्रंट-एंड लागू किया, जो अधिकांश आधुनिक कार्यान्वयनों द्वारा उपयोग किए जाने वाले "एडिनबर्ग प्रोलॉग" सिंटैक्स को परिभाषित करने के लिए आया था। वारेन ने फर्नांडो परेरा के सहयोग से प्रभावशाली DEC-10 प्रोलॉग का निर्माण करते हुए प्रोलॉग के लिए पहला संकलक भी लागू किया। वॉरेन सार मशीन बनाने के लिए वॉरेन ने बाद में DEC-10 प्रोलॉग के पीछे के विचारों को सामान्यीकृत किया।
प्रोलॉग नाम फिलिप रसेल द्वारा संक्षिप्त नाम के रूप में चुना गया था{{lang|fr|programmation en logique}}([[तर्क]] में प्रोग्रामिंग के लिए फ्रेंच भाषा)। यह 1972 के आसपास एलेन कॉलमेरॉयर द्वारा फिलिप रसेल के साथ बनाया गया था, जो रॉबर्ट कोवाल्स्की की हॉर्न क्लॉज की प्रक्रियात्मक व्याख्या पर आधारित था। यह 1960 के दशक के अंत और 1970 के दशक के प्रारंभ में उत्तरी अमेरिका में प्रचलित ज्ञान के प्रक्रियात्मक प्रतिनिधित्व के साथ एक घोषणात्मक ज्ञान प्रतिनिधित्व भाषा के रूप में तर्क के उपयोग को समेटने की इच्छा से प्रेरित था। रॉबर्ट कोवाल्स्की के अनुसार, पहला प्रोलॉग प्रणाली 1972 में कोलमेरौएर और फिलिप रसेल द्वारा विकसित किया गया था।<ref name="Kowalski"/>प्रोलॉग का पहला कार्यान्वयन जेरार्ड बट्टानी और हेनरी मेलोनी द्वारा फोरट्रान में लिखा गया एक दुभाषिया था। डेविड एच.डी. वारेन इस दुभाषिया को एडिनबर्ग विश्वविद्यालय ले गए, और वहां एक वैकल्पिक फ्रंट-एंड प्रयुक्त किया, जो अधिकांश आधुनिक कार्यान्वयनों द्वारा उपयोग किए जाने वाले "एडिनबर्ग प्रोलॉग" सिंटैक्स को परिभाषित करने के लिए आया था। वारेन ने फर्नांडो परेरा के सहयोग से प्रभावशाली DEC-10 प्रोलॉग का निर्माण करते हुए प्रोलॉग के लिए पहला संकलक भी प्रयुक्त किया। वॉरेन सार मशीन बनाने के लिए वॉरेन ने बाद में DEC-10 प्रोलॉग के पीछे के विचारों को सामान्यीकृत किया।


यूरोपीय एआई शोधकर्ताओं ने प्रोलॉग का समर्थन किया, जबकि अमेरिकियों ने [[लिस्प (प्रोग्रामिंग भाषा)]] का समर्थन किया, कथित तौर पर भाषाओं की खूबियों पर कई राष्ट्रवादी बहसें हुईं।<ref name="pountain198410">{{cite news | url=https://archive.org/stream/byte-magazine-1984-10/1984_10_BYTE_09-11_Databases#page/n377/mode/2up | title=POP and SNAP | work=BYTE | date=October 1984 | access-date=23 October 2013 | author=Pountain, Dick | pages=381}}</ref> प्रोलॉग का अधिकांश आधुनिक विकास पांचवीं पीढ़ी के कंप्यूटर सिस्टम्स प्रोजेक्ट (एफजीसीएस) की प्रेरणा से आया, जिसने अपने पहले [[ऑपरेटिंग सिस्टम]] के लिए [[KL1]] नामक प्रोलॉग का एक संस्करण विकसित किया।
यूरोपीय एआई शोधकर्ताओं ने प्रोलॉग का समर्थन किया, जबकि अमेरिकियों ने [[लिस्प (प्रोग्रामिंग भाषा)]] का समर्थन किया, कथित तौर पर भाषाओं की खूबियों पर कई राष्ट्रवादी बहसें हुईं।<ref name="pountain198410">{{cite news | url=https://archive.org/stream/byte-magazine-1984-10/1984_10_BYTE_09-11_Databases#page/n377/mode/2up | title=POP and SNAP | work=BYTE | date=October 1984 | access-date=23 October 2013 | author=Pountain, Dick | pages=381}}</ref> प्रोलॉग का अधिकांश आधुनिक विकास पांचवीं पीढ़ी के कंप्यूटर प्रणाली्स प्रोजेक्ट (एफजीसीएस) की प्रेरणा से आया, जिसने अपने पहले [[ऑपरेटिंग सिस्टम|ऑपरेटिंग प्रणाली]] के लिए [[KL1]] नामक प्रोलॉग का एक संस्करण विकसित किया।


शुद्ध प्रोलॉग मूल रूप से फॉर्म के हॉर्न क्लॉज के साथ एक संकल्प (तर्क) प्रमेय प्रोवर के उपयोग तक ही सीमित था:
शुद्ध प्रोलॉग मूल रूप से फॉर्म के हॉर्न क्लॉज के साथ एक संकल्प (तर्क) प्रमेय प्रोवर के उपयोग तक ही सीमित था:
Line 479: Line 525:
  एच दिखाने/हल करने के लिए, बी दिखाएं/हल करें<sub>1</sub> और ... और बी<sub>n</sub>.
  एच दिखाने/हल करने के लिए, बी दिखाएं/हल करें<sub>1</sub> और ... और बी<sub>n</sub>.


हालांकि, शुद्ध प्रोलॉग को जल्द ही विस्तारित कर दिया गया था, हालांकि, नकारात्मकता को विफलता के रूप में शामिल करने के लिए, जिसमें फॉर्म की नकारात्मक स्थिति नहीं थी (बी<sub>i</sub>) इसी सकारात्मक स्थितियों बी को हल करने की कोशिश करने और असफल होने के द्वारा दिखाया गया है<sub>i</sub>.
चूंकि, शुद्ध प्रोलॉग को जल्द ही विस्तारित कर दिया गया था, चूंकि, नकारात्मकता को विफलता के रूप में सम्मिलित करने के लिए, जिसमें फॉर्म की नकारात्मक स्थिति नहीं थी (बी<sub>i</sub>) इसी सकारात्मक स्थितियों बी को हल करने की प्रयास करने और असफल होने के द्वारा दिखाया गया है<sub>i</sub>.


मूल टीम द्वारा प्रोलॉग के बाद के विस्तार ने कार्यान्वयन में बाधा तर्क प्रोग्रामिंग क्षमताओं को पेश किया।
मूल टीम द्वारा प्रोलॉग के बाद के विस्तार ने कार्यान्वयन में बाधा तर्क प्रोग्रामिंग क्षमताओं को प्रस्तुत किया।


== उद्योग में प्रयोग करें ==
== उद्योग में प्रयोग करें ==
वाटसन (कंप्यूटर) में प्रोलॉग का प्रयोग किया गया है। वाटसन आईबीएम के डीपक्यूए सॉफ्टवेयर और अपाचे यूआईएमए (असंरचित सूचना प्रबंधन वास्तुकला) ढांचे का उपयोग करता है। सिस्टम जावा, सी ++, और प्रोलॉग समेत विभिन्न भाषाओं में लिखा गया था, और वितरित कंप्यूटिंग प्रदान करने के लिए [[अपाचे हडूप]] ढांचे का उपयोग करके एसयूएसई लिनक्स एंटरप्राइज़ सर्वर 11 ऑपरेटिंग सिस्टम पर चलता है। प्रोलॉग का उपयोग प्राकृतिक भाषा पार्स ट्री पर पैटर्न मिलान के लिए किया जाता है। डेवलपर्स ने कहा है: हमें एक ऐसी भाषा की आवश्यकता है जिसमें हम पार्स ट्री और अन्य एनोटेशन (जैसे नामित इकाई पहचान परिणाम) पर पैटर्न मिलान नियमों को आसानी से व्यक्त कर सकें, और एक ऐसी तकनीक जो इन नियमों को बहुत कुशलता से निष्पादित कर सके। हमने पाया कि प्रोलॉग भाषा की सरलता और अभिव्यंजना के कारण उसके लिए आदर्श विकल्प था।<ref name=lally/>Prolog का उपयोग लो-कोड डेवलपमेंट प्लेटफॉर्म [[GeneXus]] में किया जा रहा है, जो AI के आसपास केंद्रित है।{{cn|date=November 2022}} ओपन सोर्स [[ग्राफ डेटाबेस]] टर्मिनसडीबी प्रोलॉग में लागू किया गया है।<ref>{{Citation|title=terminusdb/terminusdb|date=2020-12-13|url=https://github.com/terminusdb/terminusdb|publisher=TerminusDB|access-date=2020-12-15}}</ref> टर्मिनसडीबी को सहयोगी रूप से [[ज्ञान का ग्राफ]] बनाने और क्यूरेट करने के लिए डिजाइन किया गया है।
वाटसन (कंप्यूटर) में प्रोलॉग का प्रयोग किया गया है। वाटसन आईबीएम के डीपक्यूए सॉफ्टवेयर और अपाचे यूआईएमए (असंरचित सूचना प्रबंधन वास्तुकला) ढांचे का उपयोग करता है। प्रणाली जावा, सी ++, और प्रोलॉग समेत विभिन्न भाषाओं में लिखा गया था, और वितरित कंप्यूटिंग प्रदान करने के लिए [[अपाचे हडूप]] ढांचे का उपयोग करके एसयूएसई लिनक्स एंटरप्राइज़ सर्वर 11 ऑपरेटिंग प्रणाली पर चलता है। प्रोलॉग का उपयोग प्राकृतिक भाषा पार्स ट्री पर पैटर्न मिलान के लिए किया जाता है। डेवलपर्स ने कहा है: हमें एक ऐसी भाषा की आवश्यकता है जिसमें हम पार्स ट्री और अन्य एनोटेशन (जैसे नामित इकाई पहचान परिणाम) पर पैटर्न मिलान नियमों को आसानी से व्यक्त कर सकें, और एक ऐसी तकनीक जो इन नियमों को बहुत कुशलता से निष्पादित कर सके। हमने पाया कि प्रोलॉग भाषा की सरलता और अभिव्यंजना के कारण उसके लिए आदर्श विकल्प था।<ref name=lally/> प्रोलॉग का उपयोग लो-कोड डेवलपमेंट प्लेटफॉर्म [[GeneXus]] में किया जा रहा है, जो AI के आसपास केंद्रित है।{{cn|date=November 2022}} ओपन सोर्स [[ग्राफ डेटाबेस]] टर्मिनसडीबी प्रोलॉग में प्रयुक्त किया गया है।<ref>{{Citation|title=terminusdb/terminusdb|date=2020-12-13|url=https://github.com/terminusdb/terminusdb|publisher=TerminusDB|access-date=2020-12-15}}</ref> टर्मिनसडीबी को सहयोगी रूप से [[ज्ञान का ग्राफ]] बनाने और क्यूरेट करने के लिए डिजाइन किया गया है।


== यह भी देखें ==
== यह भी देखें ==
Line 493: Line 539:


===संबंधित भाषाएं===
===संबंधित भाषाएं===
* गोडेल (प्रोग्रामिंग भाषा) | गोडेल भाषा [[समवर्ती बाधा तर्क प्रोग्रामिंग]] का दृढ़ता से टाइप किया गया कार्यान्वयन है। इसे SICStus Prolog पर बनाया गया है।
* गोडेल (प्रोग्रामिंग भाषा) | गोडेल भाषा [[समवर्ती बाधा तर्क प्रोग्रामिंग]] का दृढ़ता से टाइप किया गया कार्यान्वयन है। इसे SICStus प्रोलॉग पर बनाया गया है।
* विज़ुअल प्रोलॉग, जिसे पहले पीडीसी प्रोलॉग और टर्बो प्रोलॉग के रूप में जाना जाता था, एक डेटा प्रकार [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] है। प्रोलॉग की ऑब्जेक्ट-ओरिएंटेड बोली, जो मानक प्रोलॉग से बहुत अलग है। टर्बो प्रोलॉग के रूप में, इसका विपणन बोरलैंड द्वारा किया गया था, लेकिन अब इसे डेनिश फर्म पीडीसी (प्रोलॉग डेवलपमेंट सेंटर) द्वारा विकसित और विपणन किया जाता है, जिसने मूल रूप से इसका उत्पादन किया था।
* विज़ुअल प्रोलॉग, जिसे पहले पीडीसी प्रोलॉग और टर्बो प्रोलॉग के रूप में जाना जाता था, एक डेटा प्रकार [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] है। प्रोलॉग की ऑब्जेक्ट-ओरिएंटेड बोली, जो मानक प्रोलॉग से बहुत अलग है। टर्बो प्रोलॉग के रूप में, इसका विपणन बोरलैंड द्वारा किया गया था, लेकिन अब इसे डेनिश फर्म पीडीसी (प्रोलॉग डेवलपमेंट सेंटर) द्वारा विकसित और विपणन किया जाता है, जिसने मूल रूप से इसका उत्पादन किया था।
* डेटालॉग प्रोलॉग का एक उपसमुच्चय है। यह उन संबंधों तक सीमित है जिन्हें स्तरीकृत किया जा सकता है और यौगिक शर्तों की अनुमति नहीं देता है। Prolog के विपरीत, Datalog ट्यूरिंग-पूर्ण नहीं है।
* डेटालॉग प्रोलॉग का एक उपसमुच्चय है। यह उन संबंधों तक सीमित है जिन्हें स्तरीकृत किया जा सकता है और यौगिक नियमो की अनुमति नहीं देता है। प्रोलॉग के विपरीत, डेटालॉग ट्यूरिंग-पूर्ण नहीं है।
* मरकरी (प्रोग्रामिंग लैंग्वेज) एक स्थिर, बहुरूपी प्रकार की प्रणाली के साथ-साथ एक विधा और नियतत्ववाद प्रणाली के साथ बड़े पैमाने पर सॉफ्टवेयर इंजीनियरिंग की ओर अग्रसर प्रोलॉग की एक शाखा है।
* मरकरी (प्रोग्रामिंग भाषा) एक स्थिर, बहुरूपी प्रकार की प्रणाली के साथ-साथ एक विधा और नियतत्ववाद प्रणाली के साथ बड़े पैमाने पर सॉफ्टवेयर इंजीनियरिंग की ओर अग्रसर प्रोलॉग की एक शाखा है।
* ग्राफटॉक अतिरिक्त वस्तु-उन्मुख गुणों के साथ वॉरेन की सार मशीन का एक मालिकाना कार्यान्वयन है।
* ग्राफटॉक अतिरिक्त वस्तु-उन्मुख गुणों के साथ वॉरेन की सार मशीन का एक मालिकाना कार्यान्वयन है।
* कुछ मायनों में{{Which|date=February 2010}} प्रोलॉग प्लानर (प्रोग्रामिंग लैंग्वेज) का एक सबसेट है। प्लानर के विचारों को बाद में वैज्ञानिक समुदाय रूपक में और विकसित किया गया।
* कुछ मायनों में{{Which|date=February 2010}} प्रोलॉग प्लानर (प्रोग्रामिंग भाषा) का एक सबसेट है। प्लानर के विचारों को बाद में वैज्ञानिक समुदाय रूपक में और विकसित किया गया।
* [[एजेंटस्पीक]] [[बहु एजेंट प्रणाली]] में प्रोग्रामिंग एजेंट व्यवहार के लिए प्रोलॉग का एक रूप है।
* [[एजेंटस्पीक]] [[बहु एजेंट प्रणाली]] में प्रोग्रामिंग एजेंट व्यवहार के लिए प्रोलॉग का एक रूप है।
* [[Erlang (प्रोग्रामिंग भाषा)]] ने प्रोलॉग-आधारित कार्यान्वयन के साथ जीवन शुरू किया और प्रोलॉग के एकीकरण-आधारित सिंटैक्स को बनाए रखता है।
* [[Erlang (प्रोग्रामिंग भाषा)]] ने प्रोलॉग-आधारित कार्यान्वयन के साथ जीवन प्रारंभ किया और प्रोलॉग के एकीकरण-आधारित सिंटैक्स को बनाए रखता है।
* [https://picolisp.com/wiki/?accessToLispFunctionFromPilog Pilog] PicoLisp के शीर्ष पर निर्मित एक घोषणात्मक भाषा है, जिसमें प्रोलॉग का शब्दार्थ है, लेकिन लिस्प के सिंटैक्स का उपयोग करता है।
* [https://picolisp.com/wiki/?accessToLispFunctionFromPilog Pilog] PicoLisp के शीर्ष पर निर्मित एक घोषणात्मक भाषा है, जिसमें प्रोलॉग का श [[Category: कंप्यूटिंग में 1972]]  [[Category: घोषणात्मक प्रोग्रामिंग भाषाएँ]]  [[Category: गतिशील रूप से टाइप की गई प्रोग्रामिंग भाषाएँ]]  [[Category: तर्क प्रोग्रामिंग भाषाएँ]]  [[Category: पैटर्न मिलान प्रोग्रामिंग भाषाएं]]  [[Category: 1972 में बनाई गई प्रोग्रामिंग लैंग्वेज]]  [[Category: आईएसओ मानक के साथ प्रोग्रामिंग भाषाएँ]]  [[Category: प्रोलॉग प्रोग्रामिंग भाषा परिवार]]  [[Category: होमोइकोनिक प्रोग्रामिंग लैंग्वेज]]  [[Category: Machine Translated Page]] [[Category:Created On 17/02/2023]] ब्दार्थ है, लेकिन लिस्प के सिंटैक्स का उपयोग करता है।


==संदर्भ==
==संदर्भ==
Line 530: Line 576:
{{ISO standards}}
{{ISO standards}}
{{Authority control}}
{{Authority control}}
[[Category: कंप्यूटिंग में 1972]] [[Category: घोषणात्मक प्रोग्रामिंग भाषाएँ]] [[Category: गतिशील रूप से टाइप की गई प्रोग्रामिंग भाषाएँ]] [[Category: तर्क प्रोग्रामिंग भाषाएँ]] [[Category: पैटर्न मिलान प्रोग्रामिंग भाषाएं]] [[Category: 1972 में बनाई गई प्रोग्रामिंग लैंग्वेज]] [[Category: आईएसओ मानक के साथ प्रोग्रामिंग भाषाएँ]] [[Category: प्रोलॉग प्रोग्रामिंग भाषा परिवार]] [[Category: होमोइकोनिक प्रोग्रामिंग लैंग्वेज]]
[[Category: Machine Translated Page]]
[[Category:Created On 17/02/2023]]

Revision as of 02:23, 27 February 2023

प्रोलॉग
ParadigmLogic
द्वारा डिज़ाइन किया गयाAlain Colmerauer, Robert Kowalski
पहली प्रस्तुति1972; 52 years ago (1972)
Stable release
Part 1: General core-Edition 1 (June 1995; 29 years ago (1995-06))
Part 2: Modules-Edition 1 (June 2000; 24 years ago (2000-06))
टाइपिंग अनुशासनUntyped (its single data type is "term")
फ़ाइल नाम एक्सटेंशनएस.pl, .pro, .P
वेबसाइटPart 1: www.iso.org/standard/21413.html
Part 2: www.iso.org/standard/20775.html
Major implementations
B-Prolog, Ciao, ECLiPSe, GNU Prolog, Poplog Prolog, P#, Quintus Prolog, SICStus, Strawberry, SWI-Prolog, Tau Prolog, tuProlog, WIN-PROLOG, XSB, YAP.
Dialects
ISO Prolog, Edinburgh Prolog
Influenced by
Planner
Influenced
CHR, Clojure, Datalog, Erlang, KL0, KL1, Logtalk, Mercury, Oz, Strand, Visual Prolog, XSB

प्रोलॉग एक तर्क प्रोग्रामिंग भाषा है जो कृत्रिम सावधानी और कम्प्यूटेशनल भाषा विज्ञान से जुड़ी है।[1][2][3]

प्रोलॉग की जड़ें प्रथम-क्रम तर्क, एक औपचारिक तर्क में हैं, और कई अन्य प्रोग्रामिंग भाषाओं के विपरीत, प्रोलॉग मुख्य रूप से एक घोषणात्मक प्रोग्रामिंग भाषा के रूप में अभिप्रेत है: कार्यक्रम तर्क को अंतिम संबंध के रूप में व्यक्त किया जाता है, जिसे तथ्यों और अनुमान के नियम के रूप में दर्शाया जाता है। इन संबंधों पर एक क्वेरी चलाकर एक संगणना प्रारंभ की जाती है।[4]

एडिनबर्ग विश्वविद्यालय में रॉबर्ट कोवाल्स्की की हॉर्न क्लॉज की प्रक्रियात्मक व्याख्या के आधार पर, 1972 में एलेन कॉलमेरॉयर द्वारा फिलिप रसेल के साथ मार्सिले, फ्रांस में भाषा विकसित और कार्यान्वित की गई थी।[5][6][7]

प्रोलॉग पहली लॉजिक प्रोग्रामिंग भाषा में से एक थी[8] और आज भी इस प्रकार की सबसे लोकप्रिय भाषा बनी हुई है, जिसमें कई मुफ्त और व्यावसायिक कार्यान्वयन उपलब्ध हैं। स्वचालित प्रमेय सिद्ध करने के लिए भाषा का उपयोग[9] विशेषज्ञ प्रणालियां,[10] टर्म पुनर्लेखन,[11] टाइप प्रणाली,[12] और स्वचालित योजना,[13] साथ ही इसके उपयोग का मूल प्रयोजन क्षेत्र, प्राकृतिक भाषा प्रसंस्करण में किया गया है।[14][15] आधुनिक प्रोलॉग वातावरण ग्राफिकल यूज़र इंटरफ़ेस के साथ-साथ प्रशासनिक और नेटवर्क अनुप्रयोगों के निर्माण का समर्थन करते हैं।

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

वाक्य-विन्यास और शब्दार्थ

प्रोलॉग में, प्रोग्राम लॉजिक संबंधों के संदर्भ में व्यक्त किया जाता है, और इन संबंधों पर एक क्वेरी चलाकर एक संगणना प्रारंभ की जाती है। प्रोलॉग के एकल डेटा प्रकार, शब्द का उपयोग करके संबंधों और प्रश्नों का निर्माण किया जाता है।[4] संबंधों को खंडों द्वारा परिभाषित किया गया है। एक प्रश्न को देखते हुए, प्रोलॉग इंजन अस्वीकृत क्वेरी के संकल्प (तर्क) खंडन को ढूंढने का प्रयास करता है। यदि अस्वीकृत क्वेरी का खंडन किया जा सकता है, अर्थात, सभी मुक्त चर के लिए एक इंस्टेंटेशन पाया जाता है, जो क्लॉज़ का मिलन करता है और सिंगलटन सेट में नकारात्मक क्वेरी को अनुचित बनाता है, यह इस प्रकार है कि मूल क्वेरी, प्रयुक्त तात्कालिकता के साथ, कार्यक्रम का एक तार्किक परिणाम है। यह प्रोलॉग (और अन्य लॉजिक प्रोग्रामिंग भाषा) को विशेष रूप से डेटाबेस, प्रतीकात्मक गणित और भाषा पार्सिंग अनुप्रयोगों के लिए उपयोगी बनाता है। क्योंकि प्रोलॉग अशुद्ध विधेय (गणितीय तर्क) की अनुमति देता है, कुछ विशेष विधेय के सत्य मान की जाँच करने से कुछ सविचार दुष्प्रभाव जैसे कि स्क्रीन पर मूल्य प्रिंट करना हो सकते हैं। इस कारण से, तार्किक प्रतिमान असुविधाजनक होने पर प्रोग्रामर को कुछ मात्रा में पारंपरिक अनिवार्य प्रोग्रामिंग का उपयोग करने की अनुमति है। इसका विशुद्ध रूप से तार्किक उपसमुच्चय है, जिसे शुद्ध प्रोलॉग कहा जाता है, साथ ही साथ कई अतिरिक्त विशेषताएं भी हैं।

डेटा प्रकार

प्रोलॉग का एकल डेटा प्रकार शब्द है। नियम या तो परमाणु, संख्याएं, चर या यौगिक शब्द हैं।

  • एक 'परमाणु' एक सामान्य उद्देश्य वाला नाम है जिसका कोई अंतर्निहित अर्थ नहीं है। परमाणुओं के उदाहरणों में x, red, 'Taco', और 'some atom' सम्मिलित हैं।
  • संख्याएँ फ़्लोटिंग-पॉइंट अंकगणित या पूर्णांक हो सकती हैं। आईएसओ मानक संगत प्रोलॉग प्रणाली प्रोलॉग फ्लैग बाउंड की जांच कर सकते हैं। अधिकांश प्रमुख प्रोलॉग प्रणाली इच्छानुसार लंबाई पूर्णांक संख्याओं का समर्थन करते हैं।
  • वेरिएबल्स को अक्षरों, संख्याओं और अंडरस्कोर वर्णों वाली एक स्ट्रिंग द्वारा दर्शाया जाता है, और एक अपर-केस अक्षर या अंडरस्कोर से प्रारंभ होता है। वेरिएबल्स लॉजिक में वेरिएबल्स के समान हैं, जिसमें वे इच्छानुसार शब्दों के लिए प्लेसहोल्डर हैं।
  • एक मिश्रित शब्द एक परमाणु से बना होता है जिसे फ़ंक्टर कहा जाता है और कई तर्क होते हैं, जो फिर से शब्द होते हैं। यौगिक शब्दों को सामान्यतः एक कारक के रूप में लिखा जाता है, जिसके बाद तर्क शब्दों की अल्पविराम से अलग की गई सूची होती है, जो कोष्ठकों में निहित होती है। तर्कों की संख्या को शब्द की योग्यता कहा जाता है। एक परमाणु को शून्यता के साथ एक यौगिक शब्द के रूप में माना जा सकता है। person_friends(zelda,[tom,jim]) , यौगिक पद का उदाहरण है।

यौगिक शब्दों की विशेष स्थिति:

  • एक सूची शब्दों का एक क्रमबद्ध संग्रह है। इसे वर्गाकार कोष्ठकों द्वारा अल्पविराम से अलग किए गए शब्दों के साथ या खाली सूची की स्थिति में, [] द्वारा निरूपित किया जाता है। उदाहरण के लिए, [1,2,3] या [red,green,blue]
  • स्ट्रिंग्स: उद्धरणों से घिरे वर्णों का अनुक्रम या तो (संख्यात्मक) वर्ण कोडों की सूची, वर्णों की सूची (लंबाई 1 के परमाणु), या प्रोलॉग फ्लैग के double_quotes मान के आधार पर एक परमाणु के बराबर है।उदाहरण के लिए, "to be, or not to be".[16]

आईएसओ प्रोलॉग टाइप-चेकिंग के लिए प्रदान करता है atom/1, number/1, integer/1, और float/1 विधेय प्रदान करता है।[17]


नियम और तथ्य

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

Head :- Body.

और हेड इज़ सही के रूप में पढ़ा जाता है यदि बॉडी सही है। नियम के मुख्य भाग में विधेय के लिए कॉल होते हैं, जिन्हें नियम का लक्ष्य कहा जाता है। अंतर्निहित तार्किक ऑपरेटर ,/2 (अर्थात् एक धर्मार्थ 2 ऑपरेटर (प्रोग्रामिंग) नाम के साथ ,) लक्ष्यों के तार्किक संयोजन को दर्शाता है, और ;/2 तार्किक संयोजन को दर्शाता है। संयोजन और वियोग केवल शरीर में प्रकट हो सकते हैं, किसी नियम के शीर्ष में नहीं प्रकट हो सकते हैं।

खाली शरीर वाले खंडों को तथ्य कहा जाता है। एक तथ्य का उदाहरण है:

cat(tom).

जो नियम के बराबर है:

cat(tom) :- true.

अंतर्निहित विधेय true/0 सदैव सच होता है।

उपरोक्त तथ्य को देखते हुए, कोई पूछ सकता है:

क्या टॉम बिल्ली है?

<वाक्यविन्यास लैंग = प्रोलॉग>


</वाक्यविन्यास हाइलाइट>

क्या टॉम बिल्ली है?

?- cat(tom).
 Yes

बिल्लियाँ क्या हैं?

 ?- cat(X).
 X = tom

</वाक्यविन्यास हाइलाइट>

निकायों वाले खंड 'नियम' कहलाते हैं। नियम का एक उदाहरण है:

animal(X) :- cat(X).

यदि हम उस नियम को जोड़ दें और पूछें कि जानवर क्या चीजें हैं?

<वाक्यविन्यास लैंग = प्रोलॉग>

?- animal(X).
X = tom

</वाक्यविन्यास हाइलाइट>

कई अंतर्निहित विधेय की संबंधपरक प्रकृति के कारण, वे सामान्यतः कई दिशाओं में उपयोग किए जा सकते हैं। उदाहरण के लिए, length/2 सूची की लंबाई निर्धारित करने के लिए उपयोग किया जा सकता है (length(List, L), दी हुई सूची List) साथ ही दी गई लंबाई की एक सूची कंकाल उत्पन्न करने के लिए (length(X, 5)), और दोनों सूची कंकाल और उनकी लंबाई एक साथ उत्पन्न करने के लिए (length(X, L))। इसी प्रकार, append/3 दो सूचियों को जोड़ने के लिए उपयोग किया जा सकता है, (append(ListA, ListB, X) दी गई सूचियाँ ListA और ListB साथ ही साथ दी गई सूची को भागों में विभाजित करने के लिए (append(X, Y, List), दी गयी सूची List के लियें उपयोग किया जा सकता है। इस कारण से, पुस्तकालय का तुलनात्मक रूप से छोटा सेट कई प्रोलॉग कार्यक्रमों के लिए पर्याप्त है।

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

निष्पादन

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

<वाक्यविन्यास लैंग = प्रोलॉग>

मां_चाइल्ड (असभ्य, सैली)।

पिता_चाइल्ड (टॉम, सैली)।

पिता_चाइल्ड (टॉम, एरिका)।

पिता_चाइल्ड (माइक, टॉम)।

सहोदर (एक्स, वाई): - पेरेंट_चाइल्ड (जेड, एक्स), पैरेंट_चाइल्ड (जेड, वाई)।

माता-पिता_चाइल्ड (एक्स, वाई): - पिता_चाइल्ड (एक्स, वाई)।

पेरेंट_चाइल्ड (एक्स, वाई): - मदर_चाइल्ड (एक्स, वाई)।

</वाक्यविन्यास हाइलाइट>

इसके परिणामस्वरूप निम्न क्वेरी का मूल्यांकन सत्य के रूप में किया जा रहा है:

<वाक्यविन्यास लैंग = प्रोलॉग>

mother_child(trude, sally).
 
father_child(tom, sally).
father_child(tom, erica).
father_child(mike, tom).
 
sibling(X, Y)      :- parent_child(Z, X), parent_child(Z, Y).
 
parent_child(X, Y) :- father_child(X, Y).
parent_child(X, Y) :- mother_child(X, Y).
इसके परिणामस्वरूप निम्न क्वेरी का मूल्यांकन सत्य के रूप में किया जा रहा है:
?- sibling(sally, erica).
Yes


</वाक्यविन्यास हाइलाइट>

इसे निम्नानुसार प्राप्त किया जाता है: प्रारंभ में, क्वेरी के लिए केवल मिलान करने वाला क्लॉज-हेड sibling(sally, erica) पहला है, इसलिए क्वेरी को सिद्ध करना उस खंड के शरीर को उचित चर बाइंडिंग के साथ सिद्ध करने के बराबर है, अर्थात् संयोजन (parent_child(Z,sally), parent_child(Z,erica)) है। सिद्ध किया जाने वाला अगला लक्ष्य इस संयोजन का सबसे बायाँ लक्ष्य है, अर्थात, parent_child(Z, sally) है। दो खंड शीर्ष इस लक्ष्य से मेल खाते हैं। प्रणाली एक विकल्प-बिंदु बनाता है और पहले विकल्प की प्रयास करता है, जिसका शरीर father_child(Z, sally) है। तथ्य का उपयोग करके father_child(tom, sally) लक्ष्य को सिद्ध किया जा सकता है, इसलिए बंधन Z = tom उत्पन्न होता है, और सिद्ध किया जाने वाला अगला लक्ष्य उपरोक्त संयोजन का दूसरा भाग parent_child(tom, erica) है। फिर से, यह इसी तथ्य से सिद्ध किया जा सकता है। चूंकि सभी लक्ष्यों को सिद्ध किया जा सकता है, क्वेरी सफल होती है। चूंकि क्वेरी में कोई चर नहीं है, इसलिए उपयोगकर्ता को कोई बंधन नहीं बताया गया है। चर के साथ एक क्वेरी, जैसे:

?- father_child(Father, Child).

बैकट्रैकिंग पर सभी मान्य उत्तरों की गणना करता है।

ध्यान दें कि ऊपर बताए गए कोड के साथ, क्वेरी ?- sibling(sally, sally). भी सफल होता है। यदि वांछित हो, तो प्रासंगिक प्रतिबंधों का वर्णन करने के लिए अतिरिक्त लक्ष्य सम्मिलित होंगे।

लूप और प्रत्यावर्तन

पुनरावर्ती विधेय के माध्यम से पुनरावर्ती कलनविधि को प्रयुक्त किया जा सकता है।[18]


निषेध

बिल्ट-इन प्रोलॉग विधेय \+/1 विफलता के रूप में निषेध प्रदान करता है, जो गैर-मोनोटोनिक तर्क के लिए अनुमति देता है। लक्ष्य \+ illegal(X) नियम में

legal(X) :- \+ illegal(X).

निम्नानुसार मूल्यांकन किया जाता है: प्रोलॉग illegal(X) सिद्ध करने का प्रयास करता है। यदि उस लक्ष्य के लिए कोई प्रमाण मिल सकता है, तो मूल लक्ष्य (अर्थात, \+ illegal(X)) विफल रहता है। यदि कोई प्रमाण नहीं मिल पाता है, तो मूल लक्ष्य सफल हो जाता है। इसलिए \+/1 क्वेरी के बाद से उपसर्ग ऑपरेटर को सिद्ध करने योग्य ऑपरेटर नहीं कहा जाता है ?- \+ Goal. लक्ष्य सिद्ध नहीं होने पर सफल होता है। इस प्रकार का निषेध ध्वनि है यदि इसका तर्क ग्राउंड एक्सप्रेशन (अर्थात् कोई चर नहीं) है। यदि तर्क में चर हैं और प्रमाण प्रक्रिया पूरी हो गई है तो ध्वनि खो जाती है। विशेष रूप से, क्वेरी ?- legal(X). अब नियमबद्ध चीजों की गणना करने के लिए उपयोग नहीं किया जा सकता है।

प्रोलॉग में प्रोग्रामिंग

प्रोलॉग में, लोडिंग कोड को परामर्श के रूप में जाना जाता है। प्रोलॉग प्रॉम्प्ट पर प्रश्नों को दर्ज करके प्रोलॉग को अंतःक्रियात्मक रूप से उपयोग किया जा सकता है ?-. यदि कोई समाधान नहीं है, प्रोलॉग लिखता है no. यदि कोई समाधान मौजूद है तो उसे मुद्रित किया जाता है। यदि क्वेरी के कई समाधान हैं, तो सेमी-कोलन दर्ज करके इनका अनुरोध किया जा सकता है ;. कोड दक्षता, पठनीयता और रखरखाव में सुधार के लिए अच्छे प्रोग्रामिंग अभ्यास पर दिशानिर्देश हैं।[19] यहां प्रोलॉग में लिखे कुछ उदाहरण कार्यक्रमों का अनुसरण करें।

हैलो वर्ल्ड

क्वेरी का एक उदाहरण:

?- write('Hello World!'), nl.
Hello World!
true.

?-

संकलक अनुकूलन

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

<वाक्यविन्यास लैंग = प्रोलॉग> प्रोग्राम_ऑप्टिमाइज्ड (प्रोग0, प्रोग) :-

   program_optimized(Prog0, Prog) :-
    optimization_pass_1(Prog0, Prog1),
    optimization_pass_2(Prog1, Prog2),
    optimization_pass_3(Prog2, Prog).

</वाक्यविन्यास हाइलाइट>

या समान रूप से निश्चित खंड व्याकरण संकेतन का उपयोग करना:

program_optimized --> optimization_pass_1, optimization_pass_2, optimization_pass_3.

<वाक्यविन्यास लैंग = प्रोलॉग> प्रोग्राम_ऑप्टिमाइज्ड --> ऑप्टिमाइज़ेशन_पास_1, ऑप्टिमाइज़ेशन_पास_2, ऑप्टिमाइज़ेशन_पास_3। </वाक्यविन्यास हाइलाइट>

क्विकसॉर्ट

त्वरित छँटाई कलनविधि, एक सूची को उसके क्रमबद्ध संस्करण से संबंधित करता है: <वाक्यविन्यास लैंग = प्रोलॉग> विभाजन ([], _, [], [])। विभाजन ([X|Xs], पिवोट, स्माल्स, बिग्स): -

  partition([], _, [], []).
partition([X|Xs], Pivot, Smalls, Bigs) :-
    (   X @< Pivot ->
        Smalls = [X|Rest],
        partition(Xs, Pivot, Rest, Bigs)
    ;   Bigs = [X|Rest],
        partition(Xs, Pivot, Smalls, Rest)
    ).
 
quicksort([])     --> [].
quicksort([X|Xs]) -->
    { partition(Xs, X, Smaller, Bigger) },
    quicksort(Smaller), [X], quicksort(Bigger).

</वाक्यविन्यास हाइलाइट>

प्रोलॉग के डिजाइन पैटर्न

एक डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) सॉफ़्टवेयर डिज़ाइन में सामान्य रूप से होने वाली समस्या का एक सामान्य पुन: प्रयोज्य समाधान है। प्रोलॉग में कुछ डिज़ाइन पैटर्न कंकाल, तकनीक,[20][21] क्लिचेस,[22] कार्यक्रम आरेख[23] तर्क विवरण स्कीमाटा,[24] और उच्च क्रम प्रोग्रामिंग हैं।[25]


उच्च क्रम प्रोग्रामिंग

एक उच्च-क्रम विधेय एक विधेय है जो तर्कों के रूप में एक या अधिक अन्य विधेय लेता है। चूंकि उच्च-क्रम प्रोग्रामिंग के लिए समर्थन प्रोलॉग को प्रथम-क्रम तर्क के क्षेत्र से बाहर ले जाता है, जो विधेय पर परिमाणीकरण की अनुमति नहीं देता है,[26] आईएसओ प्रोलॉग में अब कुछ अंतर्निहित उच्च-क्रम विधेय हैं जैसे call/1, call/2, call/3, findall/3, setof/3, और bagof/3.[27] इसके अतिरिक्त, चूंकि मनमाने ढंग से प्रोलॉग लक्ष्यों का निर्माण और रन-टाइम पर मूल्यांकन किया जा सकता है, इसलिए उच्च-क्रम के विधेय को लिखना आसान है जैसे maplist/2, जो किसी दी गई सूची के प्रत्येक सदस्य के लिए एक इच्छानुसार विधेय प्रयुक्त करता है, और sublist/3, जो किसी दिए गए विधेय को संतुष्ट करने वाले तत्वों को फ़िल्टर करता है, साथ ही करी करने की भी अनुमति देता है।[25]

स्थानिक प्रतिनिधित्व (नियमो) में अस्थायी प्रतिनिधित्व (बैकट्रैकिंग पर उत्तर प्रतिस्थापन) से समाधानों को परिवर्तित करने के लिए, प्रोलॉग में विभिन्न सभी-समाधान विधेय हैं जो एक सूची में दी गई क्वेरी के सभी उत्तर प्रतिस्थापन एकत्र करते हैं। इसका उपयोग सूची समझ के लिए किया जा सकता है। उदाहरण के लिए, पूर्ण संख्याएँ उनके उचित विभाजकों के योग के बराबर होती हैं: <वाक्यविन्यास लैंग = प्रोलॉग>

 perfect(N) :-
     between(1, inf, N), U is N // 2,
     findall(D, (between(1,U,D), N mod D =:= 0), Ds),
     sumlist(Ds, N).

</वाक्यविन्यास हाइलाइट>

इसका उपयोग पूर्ण संख्याओं की गणना करने के लिए किया जा सकता है, और यह जांचने के लिए भी किया जा सकता है कि कोई संख्या पूर्ण है या नहीं है।

एक अन्य उदाहरण के रूप में, विधेय maplist एक विधेय प्रयुक्त करता है P सूचियों की एक जोड़ी में सभी संबंधित पदों के लिए:

<वाक्यविन्यास लैंग = प्रोलॉग>

maplist(_, [], []).
maplist(P, [X|Xs], [Y|Ys]) :-
   call(P, X, Y), 


  maplist (P, Xs, Ys).

</वाक्यविन्यास हाइलाइट>

कब P एक विधेय है जो सभी के लिए है X, P(X,Y) एकीकृत Y एक अद्वितीय मूल्य के साथ, maplist(P, Xs, Ys) कार्यात्मक प्रोग्रामिंग में मानचित्र (उच्च-क्रम फलन) फलन को प्रयुक्त करने के बराबर है Ys = map(Function, Xs) को प्रयुक्त करने के बराबर है।

प्रोलॉग में उच्च-क्रम प्रोग्रामिंग शैली का नेतृत्व हायलॉग और λ प्रोलॉग में किया गया था।

मॉड्यूल

बड़े में प्रोग्रामिंग और छोटे में प्रोग्रामिंग के लिए # बड़े में प्रोग्रामिंग, प्रोलॉग एक मॉड्यूलर प्रोग्रामिंग प्रदान करता है। मॉड्यूल प्रणाली आईएसओ द्वारा मानकीकृत है।[28] चूंकि, सभी प्रोलॉग कंपाइलर्स मॉड्यूल का समर्थन नहीं करते हैं, और प्रमुख प्रोलॉग कंपाइलर्स के मॉड्यूल प्रणाली के बीच संगतता समस्याएं हैं।[29] परिणामस्वरूप, एक प्रोलॉग कंपाइलर पर लिखे गए मॉड्यूल जरूरी नहीं कि दूसरों पर काम करेंगे।

पार्सिंग

निश्चित खंड व्याकरण (डीसीजी) नामक एक विशेष संकेतन है। expand_term/2 के माध्यम से परिभाषित एक नियम -->/2 के अतिरिक्त :-/2 प्रीप्रोसेसर द्वारा विस्तारित किया गया है, अन्य भाषाओं में मैक्रोज़ के अनुरूप एक सुविधा) कुछ सीधे पुनर्लेखन नियमों के अनुसार, जिसके परिणामस्वरूप सामान्य प्रोलॉग खंड होते हैं। सबसे विशेष रूप से, पुनर्लेखन विधेय को दो अतिरिक्त तर्कों से लैस करता है, जिसका उपयोग आस-पास की स्थिति को थ्रेड करने के लिए किया जा सकता है,[clarification needed] अन्य भाषाओं में कार्यात्मक प्रोग्रामिंग में मोनैड के समान। DCG का उपयोग अक्सर पार्सर्स या सूची जनरेटर लिखने के लिए किया जाता है, क्योंकि वे अंतर सूचियों के लिए एक सुविधाजनक इंटरफ़ेस भी प्रदान करते हैं।

मेटा-दुभाषिया और प्रतिबिंब

प्रोलॉग एक समरूप भाषा है और प्रतिबिंब (कंप्यूटर विज्ञान) के लिए कई सुविधाएं प्रदान करती है। इसकी अंतर्निहित निष्पादन रणनीति शुद्ध प्रोलॉग कोड के लिए संक्षिप्त मेटा-सर्कुलर मूल्यांकनकर्ता (जिसे मेटा-इंटरप्रेटर भी कहा जाता है) लिखना संभव बनाता है:

<वाक्यविन्यास लैंग = प्रोलॉग> हल (सच)। हल((सबगोल1,सबगोल2)) :-

   हल करें (सबगोल 1),
   हल करें (सबगोल 2)।

हल (सिर) :-

   खंड (सिर, शरीर),
   हल (शरीर)।

</वाक्यविन्यास हाइलाइट> कहाँ true एक खाली संयोजन का प्रतिनिधित्व करता है, और clause(Head, Body) प्रपत्र के डेटाबेस में खंडों के साथ एकीकृत करता है Head :- Body.

चूंकि प्रोलॉग कार्यक्रम स्वयं प्रोलॉग नियमो के अनुक्रम हैं (:-/2 एक इंफिक्स ऑपरेटर (प्रोग्रामिंग) है जिसे अंतर्निहित तंत्र (जैसे read/1), अनुकूलित दुभाषियों को लिखना संभव है जो डोमेन-विशिष्ट विशेषताओं के साथ प्रोलॉग को बढ़ाते हैं। उदाहरण के लिए, स्टर्लिंग और शापिरो एक मेटा-दुभाषिया प्रस्तुत करते हैं जो अनिश्चितता के साथ तर्क करता है, यहां मामूली संशोधनों के साथ पुन: प्रस्तुत किया गया है:[30]: 330  <वाक्यविन्यास लैंग = प्रोलॉग> हल (सत्य, 1) :- !. हल((सबगोल1,सबगोल2), निश्चितता) :-

   !,
   हल करें (सबगोल 1, निश्चितता 1),
   समाधान (सबगोल2, निश्चितता2),
   निश्चितता न्यूनतम है (निश्चितता1, निश्चितता2)।

हल (लक्ष्य, 1) :-

   बिल्टिन (लक्ष्य),!,
   लक्ष्य।

हल (सिर, निश्चितता) :-

   क्लॉज_सीएफ (सिर, शरीर, निश्चितता 1),
   हल (बॉडी, निश्चितता 2),
   निश्चितता निश्चितता है 1 * निश्चितता 2।

</वाक्यविन्यास हाइलाइट>

यह दुभाषिया फॉर्म के अंतर्निर्मित प्रोलॉग की एक तालिका का उपयोग करता है[30]: 327  <वाक्यविन्यास लैंग = प्रोलॉग> बिल्टिन (ए बी है)। बिल्टिन (पढ़ें (एक्स))। % वगैरह। </वाक्यविन्यास हाइलाइट>

और खंड के रूप में प्रतिनिधित्व किया clause_cf(Head, Body, Certainty). उनको देखते हुए, इसे कहा जा सकता है solve(Goal, Certainty) अंजाम देना Goal और परिणाम के बारे में निश्चितता प्राप्त करें।

ट्यूरिंग पूर्णता

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

   प्रदर्शन (क्यू0, [], एलएस, टेप0, रुपये),
   रिवर्स (एलएस, एलएस 1),
   संलग्न करें (एलएस 1, रुपये, टेप)।

प्रदर्शन (क्यूएफ, एलएस, एलएस, रुपये, रुपये) :- !. प्रदर्शन (Q0, Ls0, Ls, Rs0, Rs): -

   प्रतीक (रु0, सिम, रु.रेस्ट),
   एक बार (नियम (Q0, Sym, Q1, NewSym, Action)),
   कार्रवाई (कार्रवाई, Ls0, Ls1, [NewSym|RsRest], Rs1),
   प्रदर्शन (Q1, Ls1, Ls, Rs1, Rs)।

प्रतीक ([], बी, [])। प्रतीक ([Sym | रुपये], प्रतीक, रुपये)।

कार्रवाई (बाएं, एलएस0, एलएस, रुपये0, रुपये) :- बाएं (एलएस0, एलएस, रुपये0, रुपये)। कार्रवाई (रहना, एलएस, एलएस, रुपये, रुपये)। कार्रवाई (दाएं, Ls0, [Sym|Ls0], [Sym|Rs], रुपये)।

बाएं ([], [], रुपये0, [बी|रुपये0])। बायां ([एल | एलएस], एलएस, रुपये, [एल | रुपये])। </वाक्यविन्यास हाइलाइट>

ट्यूरिंग मशीन का एक सरल उदाहरण तथ्यों द्वारा निर्दिष्ट किया गया है: <वाक्यविन्यास लैंग = प्रोलॉग> नियम (q0, 1, q0, 1, दाएं)। नियम (क्यू0, बी, क्यूएफ, 1, रहना)। </वाक्यविन्यास हाइलाइट>

यह मशीन यूनरी एन्कोडिंग में किसी एक संख्या से वृद्धि करती है: यह किसी भी संख्या में 1 कोशिकाओं पर लूप करती है और अंत में एक अतिरिक्त 1 जोड़ती है। उदाहरण क्वेरी और परिणाम: <वाक्यविन्यास लैंग = प्रोलॉग> ?- ट्यूरिंग ([1,1,1], टीएस)। टी = [1, 1, 1, 1]; </वाक्यविन्यास हाइलाइट>

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

कार्यान्वयन


आईएसओ प्रोलॉग

मानकीकरण के लिए अंतर्राष्ट्रीय संगठन प्रोलॉग मानक में दो भाग होते हैं। आईएसओ/आईईसी 13211-1,[27][31] 1995 में प्रकाशित, का उद्देश्य प्रोलॉग के मूल तत्वों के कई कार्यान्वयनों की मौजूदा प्रथाओं को मानकीकृत करना है। इसने भाषा के उन पहलुओं को स्पष्ट किया है जो पहले अस्पष्ट थे और पोर्टेबल कार्यक्रमों की ओर ले जाते हैं। शुद्धिपत्र तीन हैं: कुरि.1:2007,[32] Cor.2:2012,[33] और Cor.3:2017।[34] आईएसओ/आईईसी 13211-2,[27]2000 में प्रकाशित, मानक में मॉड्यूल के लिए समर्थन जोड़ता है। मानक को JTC1|ISO/IEC JTC1/SC22/WG17 द्वारा बनाए रखा जाता है[35] काम करने वाला समहू। ANSI X3J17 मानक के लिए अमेरिकी तकनीकी सलाहकार समूह है।[36]


संकलन

दक्षता के लिए, प्रोलॉग कोड को सामान्यतः अमूर्त मशीन कोड में संकलित किया जाता है, जो अक्सर रजिस्टर-आधारित वॉरेन सार मशीन (डब्ल्यूएएम) निर्देश सेट से प्रभावित होता है।[37] कुछ कार्यान्वयन संकलन समय पर विधेय के प्रकार और मोड की जानकारी प्राप्त करने के लिए अमूर्त व्याख्या को नियोजित करते हैं, या उच्च प्रदर्शन के लिए वास्तविक मशीन कोड को संकलित करते हैं।[38] प्रोलॉग कोड के लिए कुशल कार्यान्वयन विधियों को तैयार करना तर्क प्रोग्रामिंग समुदाय में सक्रिय शोध का एक क्षेत्र है, और कुछ क्रियान्वयनों में कई अन्य निष्पादन विधियों को नियोजित किया जाता है। इनमें खंड द्वैतकरण और स्टैक मशीन | स्टैक-आधारित वर्चुअल मशीन सम्मिलित हैं।[citation needed]


टेल प्रत्यावर्तन

प्रोलॉग प्रणाली सामान्यतः टेल कॉल # टेल कॉल ऑप्टिमाइज़ेशन (TCO) नामक एक प्रसिद्ध ऑप्टिमाइज़ेशन पद्धति को प्रयुक्त करते हैं, जो नियतात्मक भविष्यवाणियों के लिए टेल प्रत्यावर्तन या अधिक सामान्यतः, टेल कॉल्स को प्रदर्शित करता है: टेल पोजीशन में कॉल करने से पहले क्लॉज़ के स्टैक फ्रेम को छोड़ दिया जाता है। इसलिए, नियतात्मक पूँछ-पुनरावर्ती विधेय को स्थिर स्टैक स्पेस के साथ निष्पादित किया जाता है, जैसे अन्य भाषाओं में लूप।

टर्म इंडेक्सिंग

किसी क्वेरी में किसी शब्द के साथ अनुपयोगी होने वाले खंड ढूँढना खंडों की संख्या में रैखिक है। टर्म इंडेक्सिंग एक डेटा संरचना का उपयोग करता है जो सबलाइनियर टाइम | सब-लीनियर-टाइम लुकअप को सक्षम करता है।[39] अनुक्रमण केवल कार्यक्रम के प्रदर्शन को प्रभावित करता है, यह शब्दार्थ को प्रभावित नहीं करता है। अधिकांश प्रोलॉग्स केवल पहले शब्द पर अनुक्रमण का उपयोग करते हैं, क्योंकि सभी नियमो पर अनुक्रमण करना महंगा है, लेकिन फ़ील्ड-एन्कोडेड शब्दों या सुपरइम्पोज़्ड कोड कोडवर्ड पर आधारित तकनीकें पूर्ण क्वेरी और शीर्ष पर तेज़ अनुक्रमण प्रदान करती हैं।[40][41]


हैशिंग

कुछ प्रोलॉग प्रणाली, जैसे तर्क प्रोग्रामिंग एसोसिएट्स | विन-प्रोलॉग और एसडब्ल्यूआई-प्रोलॉग, अब बड़े डेटासेट को अधिक कुशलता से संभालने में सहायता करने के लिए हैशिंग प्रयुक्त करते हैं। वर्डनेट जैसे बड़े कॉर्पोरा के साथ काम करने पर यह बहुत बड़ा प्रदर्शन लाभ देता है।

टेबलिंग

कुछ प्रोलॉग प्रणाली, (बी-प्रोलॉग, एक्सएसबी, एसडब्ल्यूआई-प्रोलॉग, वाईएपी (प्रोलॉग), और सीआओ (प्रोग्रामिंग भाषा)), टेबलिंग नामक memoization विधि को प्रयुक्त करते हैं, जो उपयोगकर्ता को मध्यवर्ती परिणामों को मैन्युअल रूप से संग्रहीत करने से मुक्त करता है। टेबलिंग एक स्पेस-टाइम ट्रेडऑफ़ है; मध्यवर्ती परिणामों को संग्रहीत करने के लिए अधिक मेमोरी का उपयोग करके निष्पादन समय को कम किया जा सकता है:[42][43]

क्वेरी मूल्यांकन में सामने आए उपलक्ष्यों को इन उपलक्ष्यों के उत्तरों के साथ एक तालिका में बनाए रखा जाता है। यदि कोई उप-लक्ष्य फिर से मिलता है, तो मूल्यांकन प्रोग्राम क्लॉज के खिलाफ संकल्प को फिर से करने के अतिरिक्त तालिका से जानकारी का पुन: उपयोग करता है।[44]</ब्लॉककोट>

टेबलिंग को विभिन्न दिशाओं में बढ़ाया जा सकता है। यह एसएलजी-रिज़ॉल्यूशन या लीनियर टेबलिंग के माध्यम से पुनरावर्ती विधेय का समर्थन कर सकता है। बहु-थ्रेडेड प्रोलॉग प्रणाली में टेबलिंग परिणामों को एक थ्रेड के लिए निजी रखा जा सकता है या सभी थ्रेड्स के बीच साझा किया जा सकता है। और वृद्धिशील टेबलिंग में, टेबलिंग परिवर्तनों पर प्रतिक्रिया कर सकती है।

हार्डवेयर में कार्यान्वयन

पांचवीं पीढ़ी पांचवीं पीढ़ी के कंप्यूटर प्रणाली प्रोजेक्ट समय समर्पित आर्किटेक्चर के साथ तेजी से निष्पादन प्राप्त करने के उद्देश्य से हार्डवेयर में प्रोलॉग को प्रयुक्त करने का प्रयास किया गया था।[45][46][47] इसके अतिरिक्त, प्रोलॉग में कई गुण हैं जो समानांतर निष्पादन के माध्यम से गति बढ़ाने की अनुमति दे सकते हैं।[48] प्रतिबंधित प्रोलॉग प्रोग्राम को फ़ील्ड प्रोग्राम करने योग्य गेट सरणी में संकलित करने के लिए एक और आधुनिक दृष्टिकोण रहा है।[49] चूंकि, सामान्य-उद्देश्य वाले हार्डवेयर में तेजी से प्रगति ने निरंतर अधिक विशिष्ट आर्किटेक्चर को पीछे छोड़ दिया है।

सेगा ने 1986 में जापानी व्यापार के लिए जारी किए गए सेगा एआई कंप्यूटर के साथ उपयोग के लिए प्रोलॉग को प्रयुक्त किया। प्रोलॉग का उपयोग टच पैड के माध्यम से जापानी भाषा में प्राकृतिक भाषा इनपुट पढ़ने के लिए किया गया था।[50]


सीमाएं

यद्यपि अनुसंधान और शिक्षा में प्रोलॉग का व्यापक रूप से उपयोग किया जाता है,[citation needed] प्रोलॉग और अन्य लॉजिक प्रोग्रामिंग भाषाओं का सामान्य रूप से कंप्यूटर उद्योग पर महत्वपूर्ण प्रभाव नहीं पड़ा है।[51] अधिकांश अनुप्रयोग औद्योगिक मानकों से छोटे होते हैं, कोड की 100,000 से अधिक पंक्तियों के साथ।[51][52] बड़े पैमाने पर प्रोग्रामिंग को जटिल माना जाता है क्योंकि सभी प्रोलॉग कंपाइलर्स मॉड्यूल का समर्थन नहीं करते हैं, और प्रमुख प्रोलॉग कंपाइलर्स के मॉड्यूल प्रणाली के बीच संगतता समस्याएं हैं।[29] कार्यान्वयन के समय प्रोलॉग कोड की पोर्टेबिलिटी भी एक समस्या रही है, लेकिन 2007 के बाद से हुए विकास का मतलब है: एडिनबर्ग/क्विंटस व्युत्पन्न प्रोलॉग कार्यान्वयन के परिवार के अन्दर पोर्टेबिलिटी पोर्टेबल वास्तविक विश्व अनुप्रयोगों को बनाए रखने की अनुमति देने के लिए पर्याप्त है।[53]

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

प्रोलॉग विशुद्ध रूप से घोषणात्मक नहीं है: कट (तर्क प्रोग्रामिंग) जैसी संरचनाओं के कारण, इसे समझने के लिए प्रोलॉग प्रोग्राम की एक प्रक्रियात्मक रीडिंग की आवश्यकता होती है।[55] प्रोलॉग प्रोग्राम में क्लॉज का क्रम महत्वपूर्ण है, क्योंकि भाषा की निष्पादन रणनीति इस पर निर्भर करती है।[56] अन्य लॉजिक प्रोग्रामिंग भाषा, जैसे कि डेटालॉग, वास्तव में घोषणात्मक हैं, लेकिन भाषा को प्रतिबंधित करती हैं। परिणामस्वरूप, कई व्यावहारिक प्रोलॉग प्रोग्राम विशुद्ध रूप से घोषणात्मक तर्क कार्यक्रमों के अतिरिक्त प्रोलॉग के गहराई-पहले खोज क्रम के अनुरूप लिखे गए हैं।[54]


एक्सटेंशन

तर्क प्रोग्रामिंग क्षमताओं को कई दिशाओं में विस्तारित करने के लिए प्रोलॉग से विभिन्न कार्यान्वयन विकसित किए गए हैं। इनमें टाइप प्रणाली, मोड्स, बाधा तर्क प्रोग्रामिंग (CLP), ऑब्जेक्ट-ओरिएंटेड लॉजिक प्रोग्रामिंग (OOLP), कॉन्करेंसी, रैखिक तर्क (LLP), फंक्शनल और उच्च क्रम तर्क प्रोग्रामिंग क्षमताएं, साथ ही ज्ञानधार के साथ इंटरऑपरेबिलिटी सम्मिलित हैं:

प्रकार

प्रोलॉग एक अप्रकाशित भाषा है। 1980 के दशक के प्रकारों को प्रस्तुत करने का प्रयास,[57][58] और 2008 तक अभी भी प्रोलॉग को प्रकारों के साथ विस्तारित करने का प्रयास किया जा रहा है।[59] प्रकार की जानकारी न केवल प्रकार की सुरक्षा के लिए उपयोगी है बल्कि प्रोलॉग प्रोग्राम के बारे में तर्क करने के लिए भी उपयोगी है।Apt, K. R.; Marchiori, E. (1994). "प्रोलॉग प्रोग्राम के बारे में तर्क: मोड से प्रकार से अभिकथन तक". Formal Aspects of Computing. 6 (S1): 743. CiteSeerX 10.1.1.57.395. doi:10.1007/BF01213601. S2CID 12235465.</रेफरी>

मोड

Mode specifier Interpretation
+ nonvar on entry
- var on entry
? Not specified

प्रोलॉग का वाक्य-विन्यास यह निर्दिष्ट नहीं करता है कि विधेय के कौन से तर्क इनपुट हैं और कौन से आउटपुट हैं।[60] हालाँकि, यह जानकारी महत्वपूर्ण है और यह अनुशंसा की जाती है कि इसे टिप्पणियों में सम्मिलित किया जाए।[61] प्रोलॉग प्रोग्राम के बारे में तर्क करते समय मोड मूल्यवान जानकारी प्रदान करते हैंCite error: Invalid <ref> tag; invalid names, e.g. too many और निष्पादन में तेजी लाने के लिए भी इसका उपयोग किया जा सकता है।[62]


बाधाएं

बाधा तर्क प्रोग्रामिंग बाधा संतुष्टि से अवधारणाओं को सम्मिलित करने के लिए प्रोलॉग का विस्तार करती है।[63][64] एक बाधा तर्क कार्यक्रम खंडों के शरीर में बाधाओं की अनुमति देता है, जैसे कि: A(X,Y) :- X+Y>0. यह बड़े पैमाने पर दहनशील अनुकूलन समस्याओं के अनुकूल है[65] और इस प्रकार स्वचालित टाइम-टेबलिंग और उत्पादन शेड्यूलिंग जैसे औद्योगिक सेटिंग्स में अनुप्रयोगों के लिए उपयोगी है। अधिकांश प्रोलॉग प्रणाली परिमित डोमेन के लिए कम से कम एक बाधा सॉल्वर के साथ शिप करते हैं, और अक्सर तर्कसंगत संख्याओं जैसे अन्य डोमेन के लिए सॉल्वर के साथ भी।

ऑब्जेक्ट-ओरिएंटेशन

फ्लोरा-2 -2 एक वस्तु-उन्मुख ज्ञान प्रतिनिधित्व और तर्क प्रणाली है जो एफ तर्क पर आधारित है और इसमें HiLog, लेनदेन तर्क और दोषपूर्ण तर्क सम्मिलित है।

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

परत एडसीएएडी, एडिनबर्ग विश्वविद्यालय के मार्गरेट मैकडॉगल द्वारा प्रोलॉग के लिए एक छोटा, पोर्टेबल, ऑब्जेक्ट-ओरिएंटेड एक्सटेंशन है।

ओब्जॉग सीएनआरएस, मार्सिले, फ्रांस से वस्तुओं और प्रोलॉग II के संयोजन वाली एक फ्रेम-आधारित भाषा थी।

प्रोलॉग++ को Logic Programming Associates द्वारा विकसित किया गया था और पहली बार 1989 में MS-DOS PC के लिए जारी किया गया था। अन्य प्लेटफार्मों के लिए समर्थन जोड़ा गया था, और एक दूसरा संस्करण 1995 में जारी किया गया था। क्रिस मॉस द्वारा प्रोलॉग ++ के बारे में एक पुस्तक एडिसन-वेस्ली द्वारा 1994 में प्रकाशित की गई थी।

विज़ुअल प्रोलॉग एक बहु-प्रतिमान भाषा है जिसमें इंटरफेस, कक्षाएं, कार्यान्वयन और ऑब्जेक्ट एक्सप्रेशन हैं।

ग्राफिक्स

प्रोलॉग प्रणाली जो ग्राफिक्स लाइब्रेरी प्रदान करते हैं वे हैं SWI-प्रोलॉग,[66] विजुअल प्रोलॉग, लॉजिक प्रोग्रामिंग एसोसिएट्स | विन-प्रोलॉग और बी-प्रोलॉग।

संगामिति

संदेश पासिंग इंटरफ़ेस पर वितरित कंप्यूटिंग के लिए प्रोलॉग-एमपीआई एक ओपन-सोर्स एसडब्ल्यूआई-प्रोलॉग एक्सटेंशन है।[67] साथ ही विभिन्न समवर्ती प्रोलॉग प्रोग्रामिंग भाषाएं भी हैं।[68]


वेब प्रोग्रामिंग

कुछ प्रोलॉग कार्यान्वयन, विशेष रूप से विज़ुअल प्रोलॉग, एसडब्ल्यूआई-प्रोलॉग और सीआओ (प्रोग्रामिंग भाषा), वेब प्रोटोकॉल, एचटीएमएल और एक्सएमएल के समर्थन के साथ सर्वर-साइड वेब प्रोग्रामिंग का समर्थन करते हैं।[69] सिमेंटिक वेब प्रारूपों जैसे कि संसाधन विवरण फ्रेमवर्क और वेब ओन्टोलॉजी भाषा का समर्थन करने के लिए एक्सटेंशन भी हैं।[70][71] प्रोलॉग को ग्राहक की ओर भाषा के रूप में भी सुझाया गया है।[72] इसके अतिरिक्त विज़ुअल प्रोलॉग JSON-RPC और Websockets का समर्थन करता है।

एडोब फ्लैश

सीडर एक निःशुल्क और बुनियादी प्रोलॉग दुभाषिया है। संस्करण 4 और ऊपर के सीडर में एफसीए (फ्लैश सीडर ऐप) का समर्थन है। यह ActionScript के माध्यम से प्रोलॉग में प्रोग्रामिंग के लिए एक नया मंच प्रदान करता है।

अन्य

  • एफ-लॉजिक ज्ञान प्रतिनिधित्व के लिए फ्रेम/ऑब्जेक्ट्स के साथ प्रोलॉग का विस्तार करता है।
  • लेन-देन तर्क राज्य-बदलते अद्यतन ऑपरेटरों के एक तार्किक सिद्धांत के साथ प्रोलॉग का विस्तार करता है। इसमें एक मॉडल-सैद्धांतिक और प्रक्रियात्मक शब्दार्थ दोनों हैं।
  • ओडब्ल्यू प्रोलॉग ओ ओ प्रोलॉग में ग्राफिक्स और इंटरफेस की कमी का उत्तर देने के लिए बनाया गया है।

अन्य भाषाओं के लिए इंटरफेस

फ्रेमवर्क मौजूद हैं जो प्रोलॉग और अन्य भाषाओं के बीच पुल कर सकते हैं:

  • LPA इंटेलिजेंस सर्वर C के अन्दर LPA प्रोलॉग for Windows को एम्बेड करने की अनुमति देता है, सी #, सी ++, जावा, वीबी, डेल्फी, नेट, लुआ, पायथन और अन्य भाषाएं। यह समर्पित स्ट्रिंग डेटा-प्रकार का शोषण करता है जो एलपीए प्रोलॉग प्रदान करता है
  • लॉजिक सर्वर एपीआई सी, सी++, जावा, वीबी, डेल्फी, .NET और किसी भी भाषा/पर्यावरण में प्रोलॉग के विस्तार और एम्बेडिंग दोनों की अनुमति देता है जो .dll या .so को कॉल कर सकता है। यह अमजी के लिए प्रयुक्त है! प्रोलॉग Amzi! प्रोलॉग + लॉजिक सर्वर लेकिन एपीआई विनिर्देश किसी भी कार्यान्वयन के लिए उपलब्ध कराया जा सकता है।
  • JPL एक द्वि-दिशात्मक जावा प्रोलॉग ब्रिज है जो डिफ़ॉल्ट रूप से SWI-प्रोलॉग के साथ आता है, जिससे जावा और प्रोलॉग एक दूसरे को (रिकर्सिवली) कॉल कर सकते हैं। यह अच्छा संगामिति समर्थन के लिए जाना जाता है और सक्रिय विकास के अधीन है।
  • इंटरप्रोलॉग, जावा मंच और प्रोलॉग के बीच एक प्रोग्रामिंग लाइब्रेरी ब्रिज, द्वि-दिशात्मक विधेय/विधि कॉलिंग के बीच कार्यान्वयन दोनों भाषाएँ। जावा ऑब्जेक्ट्स को प्रोलॉग नियमो में मैप किया जा सकता है और इसके विपरीत। प्रोलॉग लेयर में लॉजिक प्रोसेसिंग को छोड़ते हुए जावा में ग्राफिकल यूजर इंटरफेस और अन्य कार्यक्षमता के विकास की अनुमति देता है। 2013 के लिए नियोजित एसडब्ल्यूआई-प्रोलॉग और वाईएपी (प्रोलॉग) के समर्थन के साथ एक्सएसबी का समर्थन करता है।
  • प्रोवा जावा, एजेंट मैसेजिंग और प्रतिक्रिया नियमों के साथ देशी सिंटैक्स एकीकरण प्रदान करता है। Prova स्वयं को मिडलवेयर के लिए नियम-आधारित स्क्रिप्टिंग (आरबीएस) प्रणाली के रूप में रखता है। अनिवार्य प्रोग्रामिंग और घोषणात्मक प्रोग्रामिंग के संयोजन में भाषा नई जमीन बनाती है।
  • PROL जावा के लिए एक एम्बेड करने योग्य प्रोलॉग इंजन। इसमें एक छोटा आईडीई और कुछ पुस्तकालय सम्मिलित हैं।
  • जावा के लिए GNU प्रोलॉग जावा लाइब्रेरी के रूप में ISO प्रोलॉग का कार्यान्वयन है (gnu.प्रोलॉग)
  • Ciao (प्रोग्रामिंग भाषा) C, C++, जावा और रिलेशनल डेटाबेस को इंटरफेस प्रदान करता है।
  • C#-प्रोलॉग एक प्रोलॉग दुभाषिया है जिसे (प्रबंधित) C# में लिखा गया है। C# प्रोग्राम में आसानी से एकीकृत किया जा सकता है। विशेषताएँ: विश्वसनीय और काफी तेज़ दुभाषिया, कमांड लाइन इंटरफ़ेस, विंडोज-इंटरफ़ेस, बिल्ट-इन DCG, XML-predicates, SQL-predicates, विस्तारणीय। संपूर्ण स्रोत कोड उपलब्ध है, जिसमें एक पार्सर जनरेटर भी सम्मिलित है जिसका उपयोग विशेष उद्देश्य एक्सटेंशन जोड़ने के लिए किया जा सकता है।
  • PHP के लिए वॉरेन सार मशीन PHP 5.3 में एक प्रोलॉग कंपाइलर और दुभाषिया। एक पुस्तकालय जिसे स्टैंडअलोन या सिम्फनी 2.1 ढांचे के अन्दर उपयोग किया जा सकता है जिसे जावा में Stephan Buettcher's कार्य से अनुवादित किया गया था जिसे [यहाँ पाया जा सकता है] stefan.buettcher.org/cs/wam/index.html]
  • ट्यूप्रोलॉग वितरित अनुप्रयोगों और बुनियादी ढांचे के लिए एक हल्का प्रोलॉग प्रणाली है, सविचार एक न्यूनतम कोर के आसपास डिज़ाइन किया गया है, या तो वैधानिक रूप से या गतिशील रूप से विधेय के पुस्तकालयों को लोड / अनलोड करके कॉन्फ़िगर किया गया है। ट्यूप्रोलॉग मूल रूप से बहु-प्रतिमान प्रोग्रामिंग का समर्थन करता है, प्रोलॉग और मुख्यधारा की वस्तु-उन्मुख भाषाओं के बीच एक स्वच्छ, सहज एकीकरण मॉडल प्रदान करता है - जावा, ट्यूप्रोलॉग जावा संस्करण के लिए, और कोई भी .NET- आधारित भाषा (C#, F#..), ट्यूप्रोलॉग के लिए। नेट संस्करण।[73]


इतिहास

प्रोलॉग नाम फिलिप रसेल द्वारा संक्षिप्त नाम के रूप में चुना गया थाprogrammation en logique(तर्क में प्रोग्रामिंग के लिए फ्रेंच भाषा)। यह 1972 के आसपास एलेन कॉलमेरॉयर द्वारा फिलिप रसेल के साथ बनाया गया था, जो रॉबर्ट कोवाल्स्की की हॉर्न क्लॉज की प्रक्रियात्मक व्याख्या पर आधारित था। यह 1960 के दशक के अंत और 1970 के दशक के प्रारंभ में उत्तरी अमेरिका में प्रचलित ज्ञान के प्रक्रियात्मक प्रतिनिधित्व के साथ एक घोषणात्मक ज्ञान प्रतिनिधित्व भाषा के रूप में तर्क के उपयोग को समेटने की इच्छा से प्रेरित था। रॉबर्ट कोवाल्स्की के अनुसार, पहला प्रोलॉग प्रणाली 1972 में कोलमेरौएर और फिलिप रसेल द्वारा विकसित किया गया था।[5]प्रोलॉग का पहला कार्यान्वयन जेरार्ड बट्टानी और हेनरी मेलोनी द्वारा फोरट्रान में लिखा गया एक दुभाषिया था। डेविड एच.डी. वारेन इस दुभाषिया को एडिनबर्ग विश्वविद्यालय ले गए, और वहां एक वैकल्पिक फ्रंट-एंड प्रयुक्त किया, जो अधिकांश आधुनिक कार्यान्वयनों द्वारा उपयोग किए जाने वाले "एडिनबर्ग प्रोलॉग" सिंटैक्स को परिभाषित करने के लिए आया था। वारेन ने फर्नांडो परेरा के सहयोग से प्रभावशाली DEC-10 प्रोलॉग का निर्माण करते हुए प्रोलॉग के लिए पहला संकलक भी प्रयुक्त किया। वॉरेन सार मशीन बनाने के लिए वॉरेन ने बाद में DEC-10 प्रोलॉग के पीछे के विचारों को सामान्यीकृत किया।

यूरोपीय एआई शोधकर्ताओं ने प्रोलॉग का समर्थन किया, जबकि अमेरिकियों ने लिस्प (प्रोग्रामिंग भाषा) का समर्थन किया, कथित तौर पर भाषाओं की खूबियों पर कई राष्ट्रवादी बहसें हुईं।[74] प्रोलॉग का अधिकांश आधुनिक विकास पांचवीं पीढ़ी के कंप्यूटर प्रणाली्स प्रोजेक्ट (एफजीसीएस) की प्रेरणा से आया, जिसने अपने पहले ऑपरेटिंग प्रणाली के लिए KL1 नामक प्रोलॉग का एक संस्करण विकसित किया।

शुद्ध प्रोलॉग मूल रूप से फॉर्म के हॉर्न क्लॉज के साथ एक संकल्प (तर्क) प्रमेय प्रोवर के उपयोग तक ही सीमित था:

एच :- बी1, ..., बीn.

प्रमेय-प्रस्तावक का प्रयोग ऐसे खंडों को प्रक्रियाओं के रूप में मानता है:

एच दिखाने/हल करने के लिए, बी दिखाएं/हल करें1 और ... और बीn.

चूंकि, शुद्ध प्रोलॉग को जल्द ही विस्तारित कर दिया गया था, चूंकि, नकारात्मकता को विफलता के रूप में सम्मिलित करने के लिए, जिसमें फॉर्म की नकारात्मक स्थिति नहीं थी (बीi) इसी सकारात्मक स्थितियों बी को हल करने की प्रयास करने और असफल होने के द्वारा दिखाया गया हैi.

मूल टीम द्वारा प्रोलॉग के बाद के विस्तार ने कार्यान्वयन में बाधा तर्क प्रोग्रामिंग क्षमताओं को प्रस्तुत किया।

उद्योग में प्रयोग करें

वाटसन (कंप्यूटर) में प्रोलॉग का प्रयोग किया गया है। वाटसन आईबीएम के डीपक्यूए सॉफ्टवेयर और अपाचे यूआईएमए (असंरचित सूचना प्रबंधन वास्तुकला) ढांचे का उपयोग करता है। प्रणाली जावा, सी ++, और प्रोलॉग समेत विभिन्न भाषाओं में लिखा गया था, और वितरित कंप्यूटिंग प्रदान करने के लिए अपाचे हडूप ढांचे का उपयोग करके एसयूएसई लिनक्स एंटरप्राइज़ सर्वर 11 ऑपरेटिंग प्रणाली पर चलता है। प्रोलॉग का उपयोग प्राकृतिक भाषा पार्स ट्री पर पैटर्न मिलान के लिए किया जाता है। डेवलपर्स ने कहा है: हमें एक ऐसी भाषा की आवश्यकता है जिसमें हम पार्स ट्री और अन्य एनोटेशन (जैसे नामित इकाई पहचान परिणाम) पर पैटर्न मिलान नियमों को आसानी से व्यक्त कर सकें, और एक ऐसी तकनीक जो इन नियमों को बहुत कुशलता से निष्पादित कर सके। हमने पाया कि प्रोलॉग भाषा की सरलता और अभिव्यंजना के कारण उसके लिए आदर्श विकल्प था।[15] प्रोलॉग का उपयोग लो-कोड डेवलपमेंट प्लेटफॉर्म GeneXus में किया जा रहा है, जो AI के आसपास केंद्रित है।[citation needed] ओपन सोर्स ग्राफ डेटाबेस टर्मिनसडीबी प्रोलॉग में प्रयुक्त किया गया है।[75] टर्मिनसडीबी को सहयोगी रूप से ज्ञान का ग्राफ बनाने और क्यूरेट करने के लिए डिजाइन किया गया है।

यह भी देखें

संबंधित भाषाएं

  • गोडेल (प्रोग्रामिंग भाषा) | गोडेल भाषा समवर्ती बाधा तर्क प्रोग्रामिंग का दृढ़ता से टाइप किया गया कार्यान्वयन है। इसे SICStus प्रोलॉग पर बनाया गया है।
  • विज़ुअल प्रोलॉग, जिसे पहले पीडीसी प्रोलॉग और टर्बो प्रोलॉग के रूप में जाना जाता था, एक डेटा प्रकार ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग है। प्रोलॉग की ऑब्जेक्ट-ओरिएंटेड बोली, जो मानक प्रोलॉग से बहुत अलग है। टर्बो प्रोलॉग के रूप में, इसका विपणन बोरलैंड द्वारा किया गया था, लेकिन अब इसे डेनिश फर्म पीडीसी (प्रोलॉग डेवलपमेंट सेंटर) द्वारा विकसित और विपणन किया जाता है, जिसने मूल रूप से इसका उत्पादन किया था।
  • डेटालॉग प्रोलॉग का एक उपसमुच्चय है। यह उन संबंधों तक सीमित है जिन्हें स्तरीकृत किया जा सकता है और यौगिक नियमो की अनुमति नहीं देता है। प्रोलॉग के विपरीत, डेटालॉग ट्यूरिंग-पूर्ण नहीं है।
  • मरकरी (प्रोग्रामिंग भाषा) एक स्थिर, बहुरूपी प्रकार की प्रणाली के साथ-साथ एक विधा और नियतत्ववाद प्रणाली के साथ बड़े पैमाने पर सॉफ्टवेयर इंजीनियरिंग की ओर अग्रसर प्रोलॉग की एक शाखा है।
  • ग्राफटॉक अतिरिक्त वस्तु-उन्मुख गुणों के साथ वॉरेन की सार मशीन का एक मालिकाना कार्यान्वयन है।
  • कुछ मायनों में[which?] प्रोलॉग प्लानर (प्रोग्रामिंग भाषा) का एक सबसेट है। प्लानर के विचारों को बाद में वैज्ञानिक समुदाय रूपक में और विकसित किया गया।
  • एजेंटस्पीक बहु एजेंट प्रणाली में प्रोग्रामिंग एजेंट व्यवहार के लिए प्रोलॉग का एक रूप है।
  • Erlang (प्रोग्रामिंग भाषा) ने प्रोलॉग-आधारित कार्यान्वयन के साथ जीवन प्रारंभ किया और प्रोलॉग के एकीकरण-आधारित सिंटैक्स को बनाए रखता है।
  • Pilog PicoLisp के शीर्ष पर निर्मित एक घोषणात्मक भाषा है, जिसमें प्रोलॉग का श ब्दार्थ है, लेकिन लिस्प के सिंटैक्स का उपयोग करता है।

संदर्भ

  1. Clocksin, William F.; Mellish, Christopher S. (2003). Programming in Prolog. Berlin; New York: Springer-Verlag. ISBN 978-3-540-00678-7.
  2. Bratko, Ivan (2012). Prolog programming for artificial intelligence (4th ed.). Harlow, England; New York: Addison Wesley. ISBN 978-0-321-41746-6.
  3. Covington, Michael A. (1994). Natural language processing for Prolog programmers. Englewood Cliffs, N.J.: Prentice Hall. ISBN 978-0-13-629213-5.
  4. 4.0 4.1 Lloyd, J. W. (1984). Foundations of logic programming. Berlin: Springer-Verlag. ISBN 978-3-540-13299-8.
  5. 5.0 5.1 Kowalski, R. A. (1988). "The early years of logic programming" (PDF). Communications of the ACM. 31: 38. doi:10.1145/35043.35046. S2CID 12259230.
  6. Colmerauer, A.; Roussel, P. (1993). "The birth of Prolog" (PDF). ACM SIGPLAN Notices. 28 (3): 37. doi:10.1145/155360.155362.
  7. "PROLOG:a brief history". Retrieved 21 November 2021.
  8. See Logic programming § History.
  9. Stickel, M. E. (1988). "A prolog technology theorem prover: Implementation by an extended prolog compiler". Journal of Automated Reasoning. 4 (4): 353–380. CiteSeerX 10.1.1.47.3057. doi:10.1007/BF00297245. S2CID 14621218.
  10. Merritt, Dennis (1989). Building expert systems in Prolog. Berlin: Springer-Verlag. ISBN 978-0-387-97016-5.
  11. Felty, Amy. "A logic programming approach to implementing higher-order term rewriting." Extensions of Logic Programming (1992): 135-161.
  12. Kent D. Lee (19 January 2015). Foundations of Programming Languages. Springer. pp. 298–. ISBN 978-3-319-13314-0.
  13. Ute Schmid (21 August 2003). Inductive Synthesis of Functional Programs: Universal Planning, Folding of Finite Programs, and Schema Abstraction by Analogical Reasoning. Springer Science & Business Media. ISBN 978-3-540-40174-2.
  14. Fernando C. N. Pereira; Stuart M. Shieber (2005). Prolog and Natural Language Analysis. Microtome.
  15. 15.0 15.1 Adam Lally; Paul Fodor (31 March 2011). "Natural Language Processing With Prolog in the IBM Watson System". Association for Logic Programming. See also Watson (computer).
  16. ISO/IEC 13211-1:1995 Prolog, 6.3.7 Terms - double quoted list notation. International Organization for Standardization, Geneva.
  17. "Verify Type of a Term - SWI-Prolog".
  18. Carlsson, Mats (27 May 2014). SICStus Prolog User's Manual 4.3: Core reference documentation. BoD – Books on Demand. ISBN 9783735737441 – via Google Books.
  19. Covington, Michael A.; Bagnara, Roberto; O'Keefe, Richard A.; Wielemaker, Jan; Price, Simon (2011). "Coding guidelines for Prolog". Theory and Practice of Logic Programming. 12 (6): 889–927. arXiv:0911.2899. doi:10.1017/S1471068411000391. S2CID 438363.
  20. Kirschenbaum, M.; Sterling, L.S. (1993). "Applying Techniques to Skeletons". Constructing Logic Programs, (Ed. J.M.J. Jacquet): 27–140. CiteSeerX 10.1.1.56.7278.
  21. Sterling, Leon (2002). "Patterns for Prolog Programming". Computational Logic: Logic Programming and Beyond. Lecture Notes in Computer Science / Lecture Notes in Artificial Intelligence. Vol. 2407. pp. 17–26. doi:10.1007/3-540-45628-7_15. ISBN 978-3-540-43959-2.
  22. D. Barker-Plummer. Cliche programming in Prolog. In M. Bruynooghe, editor, Proc. Second Workshop on Meta-Programming in Logic, pages 247--256. Dept. of Comp. Sci., Katholieke Univ. Leuven, 1990.
  23. Gegg-harrison, T. S. (1995). Representing Logic Program Schemata in Prolog. Procs Twelfth International Conference on Logic Programming. pp. 467–481.
  24. Deville, Yves (1990). Logic programming: systematic program development. Wokingham, England: Addison-Wesley. ISBN 978-0-201-17576-9.
  25. 25.0 25.1 Naish, Lee (1996). Higher-order logic programming in Prolog (Report). Department of Computer Science, University of Melbourne. CiteSeerX 10.1.1.35.4505.
  26. "With regard to Prolog variables, variables only in the head are implicitly universally quantified, and those only in the body are implicitly existentially quantified". Retrieved 2013-05-04.
  27. 27.0 27.1 27.2 ISO/IEC 13211: Information technology — Programming languages — Prolog. International Organization for Standardization, Geneva.
  28. ISO/IEC 13211-2: Modules.
  29. 29.0 29.1 Moura, Paulo (August 2004), "Logtalk", Association of Logic Programming, 17 (3)
  30. 30.0 30.1 Shapiro, Ehud Y.; Sterling, Leon (1994). The Art of Prolog: Advanced Programming Techniques. Cambridge, Massachusetts: MIT Press. ISBN 978-0-262-19338-2.
  31. A. Ed-Dbali; Deransart, Pierre; L. Cervoni (1996). Prolog: the standard: reference manual. Berlin: Springer. ISBN 978-3-540-59304-1.
  32. "ISO/IEC 13211-1:1995/Cor 1:2007". ISO.
  33. "ISO/IEC 13211-1:1995/Cor 2:2012". ISO.
  34. "ISO/IEC 13211-1:1995/Cor 3:2017". ISO.
  35. "ISO/IEC JTC1 SC22 WG17".[permanent dead link]
  36. "X3J17 and the Prolog Standard". Archived from the original on 2009-08-23. Retrieved 2009-10-02.
  37. David H. D. Warren. "An abstract Prolog instruction set". Technical Note 309, SRI International, Menlo Park, CA, October 1983.
  38. Van Roy, P.; Despain, A. M. (1992). "High-performance logic programming with the Aquarius Prolog compiler". Computer. 25: 54–68. doi:10.1109/2.108055. S2CID 16447071.
  39. Graf, Peter (1995). Term indexing. Springer. ISBN 978-3-540-61040-3.
  40. Wise, Michael J.; Powers, David M. W. (1986). Indexing Prolog Clauses via Superimposed Code Words and Field Encoded Words. International Symposium on Logic Programming. pp. 203–210.
  41. Colomb, Robert M. (1991). "Enhancing unification in PROLOG through clause indexing". The Journal of Logic Programming. 10: 23–44. doi:10.1016/0743-1066(91)90004-9.
  42. Swift, T. (1999). "Tabling for non‐monotonic programming". Annals of Mathematics and Artificial Intelligence. 25 (3/4): 201–240. doi:10.1023/A:1018990308362. S2CID 16695800.
  43. Zhou, Neng-Fa; Sato, Taisuke (2003). "Efficient Fixpoint Computation in Linear Tabling" (PDF). Proceedings of the 5th ACM SIGPLAN International Conference on Principles and Practice of Declarative Programming: 275–283.
  44. Swift, T.; Warren, D. S. (2011). "XSB: Extending Prolog with Tabled Logic Programming". Theory and Practice of Logic Programming. 12 (1–2): 157–187. arXiv:1012.5123. doi:10.1017/S1471068411000500. S2CID 6153112.
  45. Abe, S.; Bandoh, T.; Yamaguchi, S.; Kurosawa, K.; Kiriyama, K. (1987). "High performance integrated Prolog processor IPP". Proceedings of the 14th annual international symposium on Computer architecture - ISCA '87. p. 100. doi:10.1145/30350.30362. ISBN 978-0818607769. S2CID 10283148.
  46. Robinson, Ian (1986). A Prolog processor based on a pattern matching memory device. Third International Conference on Logic Programming. Lecture Notes in Computer Science. Vol. 225. Springer. pp. 172–179. doi:10.1007/3-540-16492-8_73. ISBN 978-3-540-16492-0.
  47. Taki, K.; Nakajima, K.; Nakashima, H.; Ikeda, M. (1987). "Performance and architectural evaluation of the PSI machine". ACM SIGPLAN Notices. 22 (10): 128. doi:10.1145/36205.36195.
  48. Gupta, G.; Pontelli, E.; Ali, K. A. M.; Carlsson, M.; Hermenegildo, M. V. (2001). "Parallel execution of prolog programs: a survey". ACM Transactions on Programming Languages and Systems. 23 (4): 472. doi:10.1145/504083.504085. S2CID 2978041.
  49. "Statically Allocated Systems".
  50. "Software that takes games seriously". New Scientist. Reed Business Information. March 26, 1987. p. 34 – via Google Books.{{cite magazine}}: CS1 maint: url-status (link)
  51. 51.0 51.1 Logic programming for the real world. Zoltan Somogyi, Fergus Henderson, Thomas Conway, Richard O'Keefe. Proceedings of the ILPS'95 Postconference Workshop on Visions for the Future of Logic Programming.
  52. "FAQ: Prolog Resource Guide 1/2 [Monthly posting]Section - [1-8] The Prolog 1000 Database". www.faqs.org.
  53. Jan Wielemaker and Vıtor Santos Costa: Portability of Prolog programs: theory and case-studies. CICLOPS-WLPE Workshop 2010 Archived 2010-07-16 at the Wayback Machine.
  54. 54.0 54.1 Kiselyov, Oleg; Kameyama, Yukiyoshi (2014). Re-thinking Prolog. Proc. 31st meeting of the Japan Society for Software Science and Technology.
  55. Franzen, Torkel (1994), "Declarative vs procedural", Association of Logic Programming, 7 (3)
  56. Dantsin, Evgeny; Eiter, Thomas; Gottlob, Georg; Voronkov, Andrei (2001). "Complexity and Expressive Power of Logic Programming". ACM Computing Surveys. 33 (3): 374–425. CiteSeerX 10.1.1.616.6372. doi:10.1145/502807.502810. S2CID 518049.
  57. Mycroft, A.; O'Keefe, R. A. (1984). "A polymorphic type system for prolog". Artificial Intelligence. 23 (3): 295. doi:10.1016/0004-3702(84)90017-1.
  58. Pfenning, Frank (1992). Types in logic programming. Cambridge, Massachusetts: MIT Press. ISBN 978-0-262-16131-2.
  59. Schrijvers, Tom; Santos Costa, Vitor; Wielemaker, Jan; Demoen, Bart (2008). "Towards Typed Prolog". In Maria Garcia de la Banda; Enrico Pontelli (eds.). Logic programming : 24th international conference, ICLP 2008, Udine, Italy, December 9-13, 2008 : proceedings. Lecture Notes in Computer Science. Vol. 5366. pp. 693–697. doi:10.1007/978-3-540-89982-2_59. ISBN 9783540899822.
  60. O'Keefe, Richard A. (1990). The craft of Prolog. Cambridge, Massachusetts: MIT Press. ISBN 978-0-262-15039-2.
  61. Michael Covington; Roberto Bagnara; et al. (2010). "Coding guidelines for Prolog". arXiv:0911.2899 [cs.PL].
  62. Roy, P.; Demoen, B.; Willems, Y. D. (1987). "Improving the execution speed of compiled Prolog with modes, clause selection, and determinism". Tapsoft '87. Lecture Notes in Computer Science. Vol. 250. pp. 111. doi:10.1007/BFb0014976. ISBN 978-3-540-17611-4.
  63. Jaffar, J. (1994). "Constraint logic programming: a survey". The Journal of Logic Programming. 19–20: 503–581. doi:10.1016/0743-1066(94)90033-7.
  64. Colmerauer, Alain (1987). "Opening the Prolog III Universe". Byte. August.
  65. Wallace, M. (2002). "Constraint Logic Programming". Computational Logic: Logic Programming and Beyond. Lecture Notes in Computer Science. Vol. 2407. pp. 512–556. doi:10.1007/3-540-45628-7_19. ISBN 978-3540456285.
  66. "XPCE: the SWI-Prolog native GUI library". www.swi-prolog.org.
  67. "prolog-mpi". Apps.lumii.lv. Retrieved 2010-09-16.
  68. Ehud Shapiro. The family of concurrent logic programming languages ACM Computing Surveys. September 1989.
  69. Wielemaker, J.; Huang, Z.; Van Der Meij, L. (2008). "SWI-Prolog and the web" (PDF). Theory and Practice of Logic Programming. 8 (3): 363. doi:10.1017/S1471068407003237. S2CID 5404048.
  70. Jan Wielemaker and Michiel Hildebrand and Jacco van Ossenbruggen (2007), S. Heymans; A. Polleres; E. Ruckhaus; D. Pearse; G. Gupta (eds.), "Using {Prolog} as the fundament for applications on the semantic web" (PDF), Proceedings of the 2nd Workshop on Applications of Logic Programming and to the Web, Semantic Web and Semantic Web Services, CEUR Workshop Proceedings, Porto, Portugal: CEUR-WS.org, vol. 287, pp. 84–98
  71. Processing OWL2 Ontologies using Thea: An Application of Logic Programming. Vangelis Vassiliadis, Jan Wielemaker and Chris Mungall. Proceedings of the 5th International Workshop on OWL: Experiences and Directions (OWLED 2009), Chantilly, VA, United States, October 23–24, 2009
  72. Loke, S. W.; Davison, A. (2001). "Secure Prolog-based mobile code". Theory and Practice of Logic Programming. 1 (3): 321. arXiv:cs/0406012. CiteSeerX 10.1.1.58.6610. doi:10.1017/S1471068401001211. S2CID 11754347.
  73. "TuProlog @ UniBo". Archived from the original on 2019-03-17. Retrieved 2019-06-08.
  74. Pountain, Dick (October 1984). "POP and SNAP". BYTE. p. 381. Retrieved 23 October 2013.
  75. terminusdb/terminusdb, TerminusDB, 2020-12-13, retrieved 2020-12-15


अग्रिम पठन