प्रोलॉग: Difference between revisions

From Vigyanwiki
Line 2: Line 2:
{{About|प्रोग्रामिंग भाषा|कथा उपकरण|प्रस्ताव|अन्य उपयोग|प्रस्ताव (बहुविकल्पी)}}
{{About|प्रोग्रामिंग भाषा|कथा उपकरण|प्रस्ताव|अन्य उपयोग|प्रस्ताव (बहुविकल्पी)}}
{{Infobox programming language
{{Infobox programming language
| paradigm = [[Logic programming|Logic]]
| paradigm = [[तर्क प्रोग्रामिंग|तर्क]]
| year = {{Start date and age|1972}}
| year = {{प्रारंभ तिथि और उम्र|1972}}
| latest release version = Part 1: General core-Edition 1 ({{start date and age|1995|06}})<br />Part 2: Modules-Edition 1 ({{start date and age|2000|06}})
| latest release version = Part 1: सामान्य कोर-संस्करण 1 ({{प्रारंभ तिथि और उम्र|1995|06}})<br />Part 2: मॉड्यूल-संस्करण 1 ({{प्रारंभ तिथि और उम्र|2000|06}})
| designers = [[Alain Colmerauer]], [[Robert Kowalski]]
| designers = [[एलेन कॉलमेरॉयर]], [[रॉबर्ट कोवाल्स्की]]
| latest release date =  
| latest release date =  
| typing = Untyped (its single data type is "term")
| typing = अनटाइप्ड (इसका एकल डेटा प्रकार "टर्म" है)
| implementations = [[B-Prolog]], [[Ciao (programming language)|Ciao]], [[ECLiPSe]], [[GNU Prolog]], [[Poplog]] Prolog, [[P Sharp|P#]], [https://quintus.sics.se/ Quintus Prolog], [[SICStus]], [https://dobrev.com/ Strawberry], [[SWI-Prolog]], [http://tau-prolog.org/ Tau Prolog], tuProlog, [[Logic Programming Associates|WIN-PROLOG]], [[XSB]], [[YAP (Prolog)|YAP]].
| implementations = [[बी-प्रोलॉग]], [[सियाओ (प्रोग्रामिंग भाषा)|सियाओ]], [[ईसीएलआईपीएसई]], [[जीएनयू प्रोलॉग]], [[प्रोलॉग]] प्रोलॉग, [[पी शार्प|पी#]], [https://quintus.sics.se/ Quintus Prolog], [[एसआईसीस्टस]], [https://dobrev.com/ Strawberry], [[एसडब्ल्यूआई-प्रोलॉग]], [http://tau-prolog.org/ Tau Prolog], tuProlog, [[तर्क प्रोग्रामिंग एसोसिएट्स|विन-प्रोलॉग]], [[एक्सएसबी]], [[वाईएपी (प्रोलॉग)|वाईएपी]].
| dialects = ISO Prolog, Edinburgh Prolog
| dialects = आईएसओ प्रोलॉग, एडिनबर्ग प्रोलॉग
| influenced by = [[Planner (programming language)|Planner]]
| influenced by = [[योजनाकर्ता (प्रोग्रामिंग भाषा)|योजनाकर्ता]]
| influenced = [[Constraint Handling Rules|CHR]], [[Clojure]], [[Datalog]], [[Erlang (programming language)|Erlang]], [[KL0]], [[KL1]], [[Logtalk]], [[Mercury (programming language)|Mercury]], [[Oz (programming language)|Oz]], [[Strand (programming language)|Strand]], [[Visual Prolog]], [[XSB]]
| influenced = [[बाधा संचालन नियम|सीएचआर]], [[क्लोजर]], [[डाटालॉग]], [[एर्लंग (प्रोग्रामिंग भाषा)|एर्लंग]], [[केएल0]], [[केएल1]], [[लॉगटॉक]], [[मरकरी (प्रोग्रामिंग भाषा)|मरकरी]], [[ओजेड (प्रोग्रामिंग भाषा)|ओजेड]], [[स्ट्रैंड (प्रोग्रामिंग भाषा)|स्ट्रैंड]], [[विजुअल प्रोलॉग]], [[एक्सएसबी]]
| file_ext = <code>.pl</code>, <code>.pro</code>, <code>.P</code>
| file_ext = <code>.pl</code>, <code>.pro</code>, <code>.P</code>
| website = Part 1: {{URL|https://www.iso.org/standard/21413.html}}<br> Part 2: {{URL|https://www.iso.org/standard/20775.html}}
| website = Part 1: {{URL|https://www.iso.org/standard/21413.html}}<br> Part 2: {{URL|https://www.iso.org/standard/20775.html}}
| wikibooks = Prolog
| wikibooks = प्रोलॉग
}}
}}
प्रोलॉग एक [[तर्क प्रोग्रामिंग]] भाषा है जो [[कृत्रिम होशियारी|कृत्रिम सावधानी]] और कम्प्यूटेशनल भाषा विज्ञान से जुड़ी है।<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=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" />


एडिनबर्ग विश्वविद्यालय में रॉबर्ट कोवाल्स्की की [[हॉर्न क्लॉज]] की प्रक्रियात्मक व्याख्या के आधार पर, 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> आधुनिक प्रोलॉग वातावरण [[ग्राफिकल यूज़र इंटरफ़ेस]] के साथ-साथ प्रशासनिक और नेटवर्क अनुप्रयोगों के निर्माण का समर्थन करते हैं।


प्रोलॉग विशिष्ट कार्यों के लिए अच्छी तरह से अनुकूल है जो नियम-आधारित तार्किक प्रश्नों से लाभान्वित होते हैं जैसे [[डेटाबेस]] खोजना, ध्वनि नियंत्रण प्रणाली और टेम्पलेट भरना।
प्रोलॉग विशिष्ट कार्यों के लिए अच्छी तरह से अनुकूल है जो नियम-आधारित तार्किक प्रश्नों से लाभान्वित होते हैं जैसे [[डेटाबेस]] खोजना, ध्वनि नियंत्रण प्रणाली और टेम्पलेट भरना।
Line 29: Line 30:
{{Main|प्रोलॉग वाक्य-विन्यास और शब्दार्थ}}
{{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> तार्किक संयोजन को दर्शाता है। संयोजन और वियोग केवल शरीर में प्रकट हो सकते हैं, किसी नियम के शीर्ष में नहीं प्रकट हो सकते हैं।


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


<syntaxhighlight lang= prolog >cat(tom).</syntaxhighlight>
<syntaxhighlight lang= prolog >cat(tom).</syntaxhighlight>
Line 64: Line 65:


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


क्या टॉम बिल्ली है?
क्या टॉम बिल्ली है?
Line 77: Line 71:
   Yes
   Yes
बिल्लियाँ क्या हैं?
बिल्लियाँ क्या हैं?
  ?- cat(X).
?- cat(X).


   X = tom
   X = tom
'''</वाक्यविन्यास हाइलाइट>'''
निकायों वाले खंड 'नियम' कहलाते हैं। नियम का उदाहरण है:
 
निकायों वाले खंड 'नियम' कहलाते हैं। नियम का एक उदाहरण है:


<syntaxhighlight lang= prolog>animal(X) :- cat(X).</syntaxhighlight>
<syntaxhighlight lang= prolog>animal(X) :- cat(X).</syntaxhighlight>


यदि हम उस नियम को जोड़ दें और पूछें कि जानवर क्या चीजें हैं?
यदि हम उस नियम को जोड़ दें और पूछें कि जानवर क्या चीजें हैं?
'''<वाक्यविन्यास लैंग = प्रोलॉग>'''
  ?- animal(X).
  ?- animal(X).
  X = tom
  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> स्क्रीन पर शब्द प्रदर्शित करता है।


=== निष्पादन ===
=== निष्पादन ===
एक प्रोलॉग प्रोग्राम का निष्पादन उपयोगकर्ता द्वारा एकल लक्ष्य की पोस्टिंग द्वारा प्रारंभ किया जाता है, जिसे क्वेरी कहा जाता है। तार्किक रूप से, प्रोलॉग इंजन अस्वीकृत क्वेरी के संकल्प (तर्क) खंडन को ढूंढने का प्रयास करता है। प्रोलॉग द्वारा उपयोग की जाने वाली रिज़ॉल्यूशन विधि को एसएलडी रिज़ॉल्यूशन कहा जाता है। यदि अस्वीकृत क्वेरी का खंडन किया जा सकता है, तो यह इस प्रकार है कि क्वेरी, उपयुक्त चर बाइंडिंग के साथ, कार्यक्रम का एक तार्किक परिणाम है। उस स्थिति में, सभी जेनरेट किए गए चर बाइंडिंग उपयोगकर्ता को सूचित किए जाते हैं, और कहा जाता है कि क्वेरी सफल हो गई है। क्रियात्मक रूप से, प्रोलॉग की निष्पादन रणनीति को अन्य भाषाओं में फलन कॉल के सामान्यीकरण के रूप में माना जा सकता है, एक अंतर यह है कि एकाधिक खंड शीर्ष किसी दिए गए कॉल से मेल खा सकते हैं। उस स्थिति में, प्रणाली पहले विकल्प के क्लॉज हेड के साथ एक विकल्प-बिंदु, एकीकरण लक्ष्य बनाता है, और उस पहले विकल्प के लक्ष्यों के साथ प्रचलित रहता है। यदि प्रोग्राम को निष्पादित करने के समय कोई भी लक्ष्य विफल हो जाता है, तो सबसे आधुनिक पसंद-बिंदु बनाए जाने के बाद से किए गए सभी परिवर्तनीय बंधन पूर्ववत हो जाते हैं, और निष्पादन उस पसंद-बिंदु के अगले विकल्प के साथ प्रचलित रहता है। इस निष्पादन रणनीति को कालानुक्रमिक [[बैक ट्रैकिंग]] कहा जाता है। उदाहरण के लिए:
प्रोलॉग प्रोग्राम का निष्पादन उपयोगकर्ता द्वारा एकल लक्ष्य की पोस्टिंग द्वारा प्रारंभ किया जाता है, जिसे क्वेरी कहा जाता है। तार्किक रूप से, प्रोलॉग इंजन अस्वीकृत क्वेरी के संकल्प (तर्क) खंडन को ढूंढने का प्रयास करता है। प्रोलॉग द्वारा उपयोग की जाने वाली रिज़ॉल्यूशन विधि को एसएलडी रिज़ॉल्यूशन कहा जाता है। यदि अस्वीकृत क्वेरी का खंडन किया जा सकता है, तो यह इस प्रकार है कि क्वेरी, उपयुक्त चर बाइंडिंग के साथ, कार्यक्रम का तार्किक परिणाम है। उस स्थिति में, सभी जेनरेट किए गए चर बाइंडिंग उपयोगकर्ता को सूचित किए जाते हैं, और कहा जाता है कि क्वेरी सफल हो गई है। क्रियात्मक रूप से, प्रोलॉग की निष्पादन रणनीति को अन्य भाषाओं में फलन कॉल के सामान्यीकरण के रूप में माना जा सकता है, अंतर यह है कि एकाधिक खंड शीर्ष किसी दिए गए कॉल से मेल खा सकते हैं। उस स्थिति में, प्रणाली पहले विकल्प के क्लॉज हेड के साथ विकल्प-बिंदु, एकीकरण लक्ष्य बनाता है, और उस पहले विकल्प के लक्ष्यों के साथ प्रचलित रहता है। यदि प्रोग्राम को निष्पादित करने के समय कोई भी लक्ष्य विफल हो जाता है, तो सबसे आधुनिक पसंद-बिंदु बनाए जाने के बाद से किए गए सभी परिवर्तनीय बंधन पूर्ववत हो जाते हैं, और निष्पादन उस पसंद-बिंदु के अगले विकल्प के साथ प्रचलित रहता है। इस निष्पादन रणनीति को कालानुक्रमिक [[बैक ट्रैकिंग]] कहा जाता है। उदाहरण के लिए:
 
<वाक्यविन्यास लैंग = प्रोलॉग>
 
मां_चाइल्ड (असभ्य, सैली)।
पिता_चाइल्ड (टॉम, सैली)।
पिता_चाइल्ड (टॉम, एरिका)।
पिता_चाइल्ड (माइक, टॉम)।
सहोदर (एक्स, वाई): - पेरेंट_चाइल्ड (जेड, एक्स), पैरेंट_चाइल्ड (जेड, वाई)।
माता-पिता_चाइल्ड (एक्स, वाई): - पिता_चाइल्ड (एक्स, वाई)।
 
पेरेंट_चाइल्ड (एक्स, वाई): - मदर_चाइल्ड (एक्स, वाई)।
 
</वाक्यविन्यास हाइलाइट>
 
इसके परिणामस्वरूप निम्न क्वेरी का मूल्यांकन सत्य के रूप में किया जा रहा है:
 
<वाक्यविन्यास लैंग = प्रोलॉग>
  mother_child(trude, sally).
  mother_child(trude, sally).
    
    
Line 127: Line 93:
  father_child(mike, tom).
  father_child(mike, tom).
    
    
  sibling(X, Y)     :- parent_child(Z, X), parent_child(Z, Y).
  sibling(X, Y)     :- parent_child(Z, X), parent_child(Z, Y).
    
    
  parent_child(X, Y) :- father_child(X, Y).
  parent_child(X, Y):- father_child(X, Y).
 
parent_child(X, Y) :- mother_child(X, Y).
 
इसके परिणामस्वरूप निम्न क्वेरी का मूल्यांकन सत्य के रूप में किया जा रहा है:


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


  Yes
  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 162: Line 122:


== प्रोलॉग में प्रोग्रामिंग ==
== प्रोलॉग में प्रोग्रामिंग ==
प्रोलॉग में, लोडिंग कोड को परामर्श के रूप में जाना जाता है। प्रोलॉग प्रॉम्प्ट पर प्रश्नों को दर्ज करके प्रोलॉग को अंतःक्रियात्मक रूप से उपयोग किया जा सकता है <code>?-</code>. यदि कोई समाधान नहीं है, प्रोलॉग लिखता है <code>no</code>. यदि कोई समाधान उपस्थित है तो उसे मुद्रित किया जाता है। यदि क्वेरी के कई समाधान हैं, तो सेमी-कोलन दर्ज करके इनका अनुरोध किया जा सकता है <code>;</code>. कोड दक्षता, पठनीयता और रखरखाव में सुधार के लिए अच्छे प्रोग्रामिंग अभ्यास पर दिशानिर्देश हैं।<ref>{{Cite journal |last1=Covington |first1=Michael A. |last2=Bagnara |first2=Roberto |last3=O'Keefe |first3=Richard A. |author-link3=Richard O'Keefe |last4=Wielemaker |first4=Jan | last5=Price |first5=Simon |title=Coding guidelines for Prolog |doi=10.1017/S1471068411000391 |journal=Theory and Practice of Logic Programming |volume=12 |issue=6 |pages=889–927 |year=2011 |arxiv=0911.2899|s2cid=438363 }}</ref>
प्रोलॉग में, लोडिंग कोड को परामर्श के रूप में जाना जाता है। प्रोलॉग प्रॉम्प्ट पर प्रश्नों को अंकित करके <code>?-</code> प्रोलॉग को अंतःक्रियात्मक रूप से उपयोग किया जा सकता है। यदि कोई समाधान नहीं है, <code>no</code> प्रोलॉग लिखता है। यदि कोई समाधान उपस्थित है तो उसे मुद्रित किया जाता है। यदि क्वेरी के कई समाधान हैं, तो <code>;</code> अंकित करके इनका अनुरोध किया जा सकता है। कोड दक्षता, पठनीयता और रखरखाव में सुधार के लिए अच्छे प्रोग्रामिंग अभ्यास पर दिशानिर्देश हैं।<ref>{{Cite journal |last1=Covington |first1=Michael A. |last2=Bagnara |first2=Roberto |last3=O'Keefe |first3=Richard A. |author-link3=Richard O'Keefe |last4=Wielemaker |first4=Jan | last5=Price |first5=Simon |title=Coding guidelines for Prolog |doi=10.1017/S1471068411000391 |journal=Theory and Practice of Logic Programming |volume=12 |issue=6 |pages=889–927 |year=2011 |arxiv=0911.2899|s2cid=438363 }}</ref>
 
यहां प्रोलॉग में लिखे कुछ उदाहरण कार्यक्रमों का अनुसरण करें।
यहां प्रोलॉग में लिखे कुछ उदाहरण कार्यक्रमों का अनुसरण करें।


=== हैलो वर्ल्ड ===
=== हैलो वर्ल्ड ===
क्वेरी का एक उदाहरण:
क्वेरी का उदाहरण:
  ?- write('Hello World!'), nl.
  ?- write('Hello World!'), nl.


Line 175: Line 136:


=== संकलक अनुकूलन ===
=== संकलक अनुकूलन ===
राज्य संक्रमण के अनुक्रम के रूप में किसी भी गणना को घोषणात्मक रूप से व्यक्त किया जा सकता है। एक उदाहरण के रूप में, तीन ऑप्टिमाइज़ेशन पास वाले एक [[अनुकूलन संकलक]] को प्रारंभिक प्रोग्राम और उसके अनुकूलित रूप के बीच संबंध के रूप में कार्यान्वित किया जा सकता है:
राज्य संक्रमण के अनुक्रम के रूप में किसी भी गणना को घोषणात्मक रूप से व्यक्त किया जा सकता है। उदाहरण के रूप में, तीन ऑप्टिमाइज़ेशन पास वाले [[अनुकूलन संकलक]] को प्रारंभिक प्रोग्राम और उसके अनुकूलित रूप के बीच संबंध के रूप में कार्यान्वित किया जा सकता है:
 
     program_optimized(Prog0, Prog):-
'''<वाक्यविन्यास लैंग = प्रोलॉग>
प्रोग्राम_ऑप्टिमाइज्ड (प्रोग0, प्रोग) :-'''
     program_optimized(Prog0, Prog) :-


     optimization_pass_1(Prog0, Prog1),
     optimization_pass_1(Prog0, Prog1),
     optimization_pass_2(Prog1, Prog2),
     optimization_pass_2(Prog1, Prog2),
 
या समान रूप से [[निश्चित खंड व्याकरण]] संकेतन का उपयोग करना:
     optimization_pass_3(Prog2, Prog).
     optimization_pass_3(Prog2, Prog).
'''</वाक्यविन्यास हाइलाइट>'''
या समान रूप से [[निश्चित खंड व्याकरण]] संकेतन का उपयोग करना:
program_optimized --> optimization_pass_1, optimization_pass_2, optimization_pass_3.
'''<वाक्यविन्यास लैंग = प्रोलॉग>
प्रोग्राम_ऑप्टिमाइज्ड --> ऑप्टिमाइज़ेशन_पास_1, ऑप्टिमाइज़ेशन_पास_2, ऑप्टिमाइज़ेशन_पास_3।
</वाक्यविन्यास हाइलाइट>'''
=== क्विकसॉर्ट ===
=== क्विकसॉर्ट ===
त्वरित छँटाई कलनविधि, एक सूची को उसके क्रमबद्ध संस्करण से संबंधित करता है:
त्वरित छँटाई कलनविधि, सूची को उसके क्रमबद्ध संस्करण से संबंधित करता है:
'''<वाक्यविन्यास लैंग = प्रोलॉग>
विभाजन ([], _, [], [])।
विभाजन ([X|Xs], पिवोट, स्माल्स, बिग्स): -'''
   partition([], _, [], []).
   partition([], _, [], []).


  partition([X|Xs], Pivot, Smalls, Bigs) :-
  partition([X|Xs], Pivot, Smalls, Bigs):-
     (  X @< Pivot ->
     (  X @< Pivot ->
         Smalls = [X|Rest],
         Smalls = [X|Rest],
         partition(Xs, Pivot, Rest, Bigs)
         partition(Xs, Pivot, Rest, Bigs)
    ;  Bigs = [X|Rest],
    ;  Bigs = [X|Rest],
         partition(Xs, Pivot, Smalls, Rest)
         partition(Xs, Pivot, Smalls, Rest)
     ).
     ).
Line 214: Line 159:
     { partition(Xs, X, Smaller, Bigger) },
     { partition(Xs, X, Smaller, Bigger) },
     quicksort(Smaller), [X], quicksort(Bigger).
     quicksort(Smaller), [X], quicksort(Bigger).
'''</वाक्यविन्यास हाइलाइट>'''
=== प्रोलॉग के डिजाइन पैटर्न ===
=== प्रोलॉग के डिजाइन पैटर्न ===
एक डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) सॉफ़्टवेयर डिज़ाइन में सामान्य रूप से होने वाली समस्या का एक सामान्य पुन: प्रयोज्य समाधान है। प्रोलॉग में कुछ डिज़ाइन पैटर्न कंकाल, तकनीक,<ref>{{Cite journal
डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) सॉफ़्टवेयर डिज़ाइन में सामान्य रूप से होने वाली समस्या का सामान्य पुन: प्रयोज्य समाधान है। प्रोलॉग में कुछ डिज़ाइन पैटर्न कंकाल, तकनीक,<ref>{{Cite journal
  | title = Applying Techniques to Skeletons
  | title = Applying Techniques to Skeletons
  | year = 1993
  | year = 1993
Line 261: Line 204:
{{Main|उच्च-क्रम तर्क|उच्च-क्रम प्रोग्रामिंग}}
{{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"/>


स्थानिक प्रतिनिधित्व (नियमो) में अस्थायी प्रतिनिधित्व (बैकट्रैकिंग पर उत्तर प्रतिस्थापन) से समाधानों को परिवर्तित करने के लिए, प्रोलॉग में विभिन्न सभी-समाधान विधेय हैं जो एक सूची में दी गई क्वेरी के सभी उत्तर प्रतिस्थापन एकत्र करते हैं। इसका उपयोग [[सूची समझ]] के लिए किया जा सकता है। उदाहरण के लिए, पूर्ण संख्याएँ उनके उचित विभाजकों के योग के बराबर होती हैं:
स्थानिक प्रतिनिधित्व (नियमो) में अस्थायी प्रतिनिधित्व (बैकट्रैकिंग पर उत्तर प्रतिस्थापन) से समाधानों को परिवर्तित करने के लिए, प्रोलॉग में विभिन्न सभी-समाधान विधेय हैं जो सूची में दी गई क्वेरी के सभी उत्तर प्रतिस्थापन एकत्र करते हैं। इसका उपयोग [[सूची समझ]] के लिए किया जा सकता है। उदाहरण के लिए, पूर्ण संख्याएँ उनके उचित विभाजकों के योग के बराबर होती हैं:
'''<वाक्यविन्यास लैंग = प्रोलॉग>'''
   perfect(N):-
   perfect(N) :-
       between(1, inf, N), U is N // 2,
       between(1, inf, N), U is N // 2,
       findall(D, (between(1,U,D), N mod D =:= 0), Ds),
       findall(D, (between(1,U,D), N mod D =:= 0), Ds),


       sumlist(Ds, N).
       sumlist(Ds, N).
'''</वाक्यविन्यास हाइलाइट>'''
इसका उपयोग पूर्ण संख्याओं की गणना करने के लिए किया जा सकता है, और यह जांचने के लिए भी किया जा सकता है कि कोई संख्या पूर्ण है या नहीं है।
इसका उपयोग पूर्ण संख्याओं की गणना करने के लिए किया जा सकता है, और यह जांचने के लिए भी किया जा सकता है कि कोई संख्या पूर्ण है या नहीं है।


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


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


   
  maplist (P, Xs, Ys).
  maplist (P, Xs, 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|हायलॉग]] और λ प्रोलॉग में किया गया था।
प्रोलॉग में उच्च-क्रम प्रोग्रामिंग शैली का नेतृत्व [[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|प्रोलॉग वाक्य-विन्यास और शब्दार्थ # निश्चित खंड व्याकरण|निश्चित खंड व्याकरण}}
{{Main|प्रोलॉग वाक्य-विन्यास और शब्दार्थ # निश्चित खंड व्याकरण|निश्चित खंड व्याकरण}}


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


== मेटा-दुभाषिया और प्रतिबिंब ==
== मेटा-दुभाषिया और प्रतिबिंब ==
प्रोलॉग एक समरूप भाषा है और प्रतिबिंब के लिए कई सुविधाएं प्रदान करती है। इसकी अंतर्निहित निष्पादन रणनीति शुद्ध प्रोलॉग कोड के लिए संक्षिप्त [[मेटा-सर्कुलर मूल्यांकनकर्ता]] (जिसे मेटा-इंटरप्रेटर भी कहा जाता है) लिखना संभव बनाता है:
प्रोलॉग समरूप भाषा है और प्रतिबिंब के लिए कई सुविधाएं प्रदान करती है। इसकी अंतर्निहित निष्पादन रणनीति शुद्ध प्रोलॉग कोड के लिए संक्षिप्त [[मेटा-सर्कुलर मूल्यांकनकर्ता]] (जिसे मेटा-इंटरप्रेटर भी कहा जाता है) लिखना संभव बनाता है:
 
'''<वाक्यविन्यास लैंग = प्रोलॉग>
हल (सच)।
हल((सबगोल1,सबगोल2)) :-'''
   solve(true).
   solve(true).


  solve((Subgoal1,Subgoal2)) :-  
  solve((Subgoal1,Subgoal2)):-  
     solve(Subgoal1),
     solve(Subgoal1),
     solve(Subgoal2).
     solve(Subgoal2).
  solve(Head) :-  
  solve(Head):-  
     clause(Head, Body),
     clause(Head, Body),
     solve(Body).
     solve(Body).
'''हल (सिर) :-'''
यहाँ <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>), अनुकूलित दुभाषियों को लिखना संभव है जो डोमेन-विशिष्ट विशेषताओं के साथ प्रोलॉग को बढ़ाते हैं।


चूंकि प्रोलॉग कार्यक्रम स्वयं प्रोलॉग नियमो के अनुक्रम हैं (<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}}
उदाहरण के लिए, स्टर्लिंग और शापिरो मेटा-दुभाषिया प्रस्तुत करते हैं जो अनिश्चितता के साथ तर्क करता है, यहां सामान्य संशोधनों के साथ पुन: प्रस्तुत किया गया है:<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}}
  solve(true, 1):-!.


'''<वाक्यविन्यास लैंग = प्रोलॉग>
  solve((Subgoal1,Subgoal2), Certainty):-
हल (सत्य, 1) :- !.
    !,
हल((सबगोल1,सबगोल2), निश्चितता) :-'''
  solve(true, 1) :- !.
 
  solve((Subgoal1,Subgoal2), Certainty) :-
    !,
     solve(Subgoal1, Certainty1),
     solve(Subgoal1, Certainty1),
     solve(Subgoal2, Certainty2),
     solve(Subgoal2, Certainty2),
     Certainty is min(Certainty1, Certainty2).
     Certainty is min(Certainty1, Certainty2).
  solve(Goal, 1) :-
  solve(Goal, 1):-
     builtin(Goal), !,  
     builtin(Goal),!,  
     Goal.
     Goal.
  solve(Head, Certainty) :-
  solve(Head, Certainty):-
     clause_cf(Head, Body, Certainty1),
     clause_cf(Head, Body, Certainty1),
     solve(Body, Certainty2),
     solve(Body, Certainty2),
     Certainty is Certainty1 * Certainty2.
     Certainty is Certainty1 * Certainty2.
यह दुभाषिया फॉर्म के अंतर्निर्मित प्रोलॉग की एक तालिका का उपयोग करता है<ref name="AOP94" />{{rp|327}}
यह दुभाषिया फॉर्म के अंतर्निर्मित प्रोलॉग की तालिका का उपयोग करता है<ref name="AOP94" />{{rp|327}}
  builtin(A is B).
  builtin(A is B).
  builtin(read(X)).
  builtin(read(X)).


  % etc.
  % etc.
'''हल (सिर, निश्चितता) :-'''
और खंड <code>clause_cf(Head, Body, Certainty)</code> के रूप में प्रतिनिधित्व किया। उनको देखते हुए, उन्हें देखते हुए, इसे <code>Goal</code> को निष्पादित करने और परिणाम के बारे में निश्चितता प्राप्त करने के लिए <code>solve(Goal, Certainty)</code> कहा जा सकता है।
    '''क्लॉज_सीएफ (सिर, शरीर, निश्चितता 1),
    हल (बॉडी, निश्चितता 2),
    निश्चितता निश्चितता है 1 * निश्चितता 2।'''
'''</वाक्यविन्यास हाइलाइट>'''
 
'''यह दुभाषिया फॉर्म के अंतर्निर्मित प्रोलॉग की एक तालिका का उपयोग करता है<ref name="AOP94" />{{rp|327}}'''
 
'''<वाक्यविन्यास लैंग = प्रोलॉग>
बिल्टिन (ए बी है)।
बिल्टिन (पढ़ें (एक्स))।
% वगैरह।
</वाक्यविन्यास हाइलाइट>'''
 
और खंड <code>clause_cf(Head, Body, Certainty)</code> के रूप में प्रतिनिधित्व किया। उनको देखते हुए, उन्हें देखते हुए, इसे <code>Goal</code> को निष्पादित करने और परिणाम के बारे में निश्चितता प्राप्त करने के लिए <code>solve(Goal, Certainty)</code> कहा जा सकता है। '''इसे कहा जा सकता है  अंजाम देना  और परिणाम के बारे में निश्चितता प्राप्त करें।'''


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


     perform(q0, [], Ls, Tape0, Rs),
     perform(q0, [], Ls, Tape0, Rs),
Line 370: Line 277:
     append(Ls1, Rs, Tape).
     append(Ls1, Rs, Tape).
    
    
  perform(qf, Ls, Ls, Rs, Rs) :- !.
  perform(qf, Ls, Ls, Rs, Rs):-!.
  perform(Q0, Ls0, Ls, Rs0, Rs) :-
  perform(Q0, Ls0, Ls, Rs0, Rs):-
     symbol(Rs0, Sym, RsRest),
     symbol(Rs0, Sym, RsRest),
     once(rule(Q0, Sym, Q1, NewSym, Action)),
     once(rule(Q0, Sym, Q1, NewSym, Action)),
Line 380: Line 287:
  symbol([Sym|Rs], Sym, Rs).
  symbol([Sym|Rs], Sym, Rs).
    
    
  action(left, Ls0, Ls, Rs0, Rs) :- left(Ls0, Ls, Rs0, Rs).
  action(left, Ls0, Ls, Rs0, Rs):- left(Ls0, Ls, Rs0, Rs).
  action(stay, Ls, Ls, Rs, Rs).
  action(stay, Ls, Ls, Rs, Rs).
  action(right, Ls0, [Sym|Ls0], [Sym|Rs], Rs).
  action(right, Ls0, [Sym|Ls0], [Sym|Rs], Rs).
Line 386: Line 293:
  left([], [], Rs0, [b|Rs0]).
  left([], [], Rs0, [b|Rs0]).
  left([L|Ls], Ls, Rs, [L|Rs]).
  left([L|Ls], Ls, Rs, [L|Rs]).
ट्यूरिंग मशीन का एक सरल उदाहरण तथ्यों द्वारा निर्दिष्ट किया गया है:
ट्यूरिंग मशीन का सरल उदाहरण तथ्यों द्वारा निर्दिष्ट किया गया है:
  rule(q0, 1, q0, 1, right).
  rule(q0, 1, q0, 1, right).


  rule(q0, b, qf, 1, stay).
  rule(q0, b, qf, 1, stay).
यह मशीन यूनरी एन्कोडिंग में किसी एक संख्या से वृद्धि करती है: यह "1" सेल की किसी भी संख्या पर लूप करती है और अंत में एक अतिरिक्त "1" जोड़ती है। उदाहरण क्वेरी और परिणाम:
यह मशीन यूनरी एन्कोडिंग में किसी संख्या से वृद्धि करती है: यह "1" सेल की किसी भी संख्या पर लूप करती है और अंत में अतिरिक्त "1" जोड़ती है। उदाहरण क्वेरी और परिणाम:
  ?- turing([1,1,1], Ts).
  ?- turing([1,1,1], Ts).
  Ts = [1, 1, 1, 1] ;
  Ts = [1, 1, 1, 1];
'''प्रतीक ([], बी, [])।
प्रतीक ([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];
</वाक्यविन्यास हाइलाइट>'''
 
यह दर्शाता है कि कैसे किसी भी संगणना को घोषणात्मक रूप से राज्य के संक्रमण के अनुक्रम के रूप में व्यक्त किया जा सकता है, जिसे प्रोलॉग में ऋण के निरंतर राज्यों के बीच संबंध के रूप में प्रयुक्त किया गया है।
यह दर्शाता है कि कैसे किसी भी संगणना को घोषणात्मक रूप से राज्य के संक्रमण के अनुक्रम के रूप में व्यक्त किया जा सकता है, जिसे प्रोलॉग में ऋण के निरंतर राज्यों के बीच संबंध के रूप में प्रयुक्त किया गया है।
== कार्यान्वयन ==
== कार्यान्वयन ==
{{Further|प्रोलॉग कार्यान्वयन की तुलना}}
{{Further|प्रोलॉग कार्यान्वयन की तुलना}}
Line 423: Line 306:


=== आईएसओ प्रोलॉग ===
=== आईएसओ प्रोलॉग ===
मानकीकरण के लिए अंतर्राष्ट्रीय संगठन प्रोलॉग मानक में दो भाग होते हैं। आईएसओ/आईईसी 13211-1,<ref name="ISO 13211">ISO/IEC 13211: Information technology &mdash; Programming languages &mdash; Prolog. [[International Organization for Standardization]], Geneva.</ref><ref>{{cite book |author1=A. Ed-Dbali |author2=Deransart, Pierre |author3=L. Cervoni |title=Prolog: the standard: reference manual |publisher=Springer |location=Berlin |year=1996 |isbn=978-3-540-59304-1 }}</ref> 1995 में प्रकाशित, का उद्देश्य प्रोलॉग के मूल तत्वों के कई कार्यान्वयनों की उपस्थिता प्रथाओं को मानकीकृत करना है। इसने भाषा के उन पहलुओं को स्पष्ट किया है जो पहले अस्पष्ट थे और पोर्टेबल कार्यक्रमों की ओर ले जाते हैं। शुद्धिपत्र Cor.1:2007,<ref name="Cor.1">{{Cite web|url=https://www.iso.org/cms/render/live/en/sites/isoorg/contents/data/standard/05/04/50405.html|title=ISO/IEC 13211-1:1995/Cor 1:2007|website=ISO}}</ref> Cor.2:2012,<ref name="Cor.2">{{Cite web|url=https://www.iso.org/cms/render/live/en/sites/isoorg/contents/data/standard/05/80/58033.html|title=ISO/IEC 13211-1:1995/Cor 2:2012|website=ISO}}</ref> और Cor.3:2017  तीन हैं।<ref name="Cor.3">{{Cite web|url=https://www.iso.org/cms/render/live/en/sites/isoorg/contents/data/standard/07/31/73194.html|title=ISO/IEC 13211-1:1995/Cor 3:2017|website=ISO}}</ref> आईएसओ/आईईसी 13211-2,<ref name="ISO 13211" />2000 में प्रकाशित, मानक में मॉड्यूल के लिए समर्थन जोड़ता है। मानक को आईएसओ/आईईसी जेटीसी1/एससी22/डब्ल्यूजी17<ref name="WG17">{{Cite web|url=http://iso.org/jtc1sc22wg17|title=ISO/IEC JTC1 SC22 WG17}}{{Dead link|date=February 2023 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> कार्यकारी समूह द्वारा बनाए रखा जाता है। एएनएसआई एक्स3जे17 मानक के लिए अमेरिकी तकनीकी सलाहकार समूह है।<ref name="X3J17">{{cite web|url=http://www.sju.edu/~jhodgson/x3j17.html|title=X3J17 and the Prolog Standard|access-date=2009-10-02|archive-url=https://web.archive.org/web/20090823160951/http://www.sju.edu/~jhodgson/x3j17.html|archive-date=2009-08-23|url-status=dead}}</ref> '''मानक को JTC1|ISO/IEC JTC1/SC22/WG17 द्वारा बनाए रखा जाता है काम करने वाला समहू। ANSI X3J17 मानक के लिए अमेरिकी तकनीकी सलाहकार समूह है।'''
मानकीकरण के लिए अंतर्राष्ट्रीय संगठन प्रोलॉग मानक में दो भाग होते हैं। आईएसओ/आईईसी 13211-1,<ref name="ISO 13211">ISO/IEC 13211: Information technology &mdash; Programming languages &mdash; Prolog. [[International Organization for Standardization]], Geneva.</ref><ref>{{cite book |author1=A. Ed-Dbali |author2=Deransart, Pierre |author3=L. Cervoni |title=Prolog: the standard: reference manual |publisher=Springer |location=Berlin |year=1996 |isbn=978-3-540-59304-1 }}</ref> 1995 में प्रकाशित, का उद्देश्य प्रोलॉग के मूल तत्वों के कई कार्यान्वयनों की उपस्थिता प्रथाओं को मानकीकृत करना है। इसने भाषा के उन पहलुओं को स्पष्ट किया है जो पहले अस्पष्ट थे और पोर्टेबल कार्यक्रमों की ओर ले जाते हैं। शुद्धिपत्र Cor.1:2007,<ref name="Cor.1">{{Cite web|url=https://www.iso.org/cms/render/live/en/sites/isoorg/contents/data/standard/05/04/50405.html|title=ISO/IEC 13211-1:1995/Cor 1:2007|website=ISO}}</ref> Cor.2:2012,<ref name="Cor.2">{{Cite web|url=https://www.iso.org/cms/render/live/en/sites/isoorg/contents/data/standard/05/80/58033.html|title=ISO/IEC 13211-1:1995/Cor 2:2012|website=ISO}}</ref> और Cor.3:2017  तीन हैं।<ref name="Cor.3">{{Cite web|url=https://www.iso.org/cms/render/live/en/sites/isoorg/contents/data/standard/07/31/73194.html|title=ISO/IEC 13211-1:1995/Cor 3:2017|website=ISO}}</ref> आईएसओ/आईईसी 13211-2,<ref name="ISO 13211" />2000 में प्रकाशित, मानक में मॉड्यूल के लिए समर्थन जोड़ता है। मानक को आईएसओ/आईईसी जेटीसी1/एससी22/डब्ल्यूजी17<ref name="WG17">{{Cite web|url=http://iso.org/jtc1sc22wg17|title=ISO/IEC JTC1 SC22 WG17}}{{Dead link|date=February 2023 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> कार्यकारी समूह द्वारा बनाए रखा जाता है। एएनएसआई एक्स3जे17 मानक के लिए अमेरिकी तकनीकी सलाहकार समूह है।<ref name="X3J17">{{cite web|url=http://www.sju.edu/~jhodgson/x3j17.html|title=X3J17 and the Prolog Standard|access-date=2009-10-02|archive-url=https://web.archive.org/web/20090823160951/http://www.sju.edu/~jhodgson/x3j17.html|archive-date=2009-08-23|url-status=dead}}</ref>
 






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




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


=== टर्म इंडेक्सिंग ===
=== टर्म इंडेक्सिंग ===
{{Main|टर्म इंडेक्सिंग}}
{{Main|टर्म इंडेक्सिंग}}
किसी क्वेरी में किसी शब्द के साथ अनुपयोगी होने वाले खंड ढूँढना खंडों की संख्या में रैखिक है। टर्म इंडेक्सिंग एक [[डेटा संरचना]] का उपयोग करता है जो '''सबलाइनियर टाइम |''' सब-लीनियर-टाइम लुकअप को सक्षम करता है।<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>




Line 443: Line 328:


=== टेबलिंग ===
=== टेबलिंग ===
कुछ प्रोलॉग प्रणाली, ([[बी-प्रोलॉग]], एक्सएसबी, एसडब्ल्यूआई-प्रोलॉग, वाईएपी (प्रोलॉग), और सीआओ (प्रोग्रामिंग भाषा)), टेबलिंग नामक [[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>
टेबलिंग को विभिन्न दिशाओं में बढ़ाया जा सकता है। यह एसएलजी-रिज़ॉल्यूशन या लीनियर टेबलिंग के माध्यम से पुनरावर्ती विधेय का समर्थन कर सकता है। बहु-थ्रेडेड प्रोलॉग प्रणाली में टेबलिंग परिणामों को एक थ्रेड के लिए निजी रखा जा सकता है या सभी थ्रेड्स के बीच साझा किया जा सकता है। और वृद्धिशील टेबलिंग में, टेबलिंग परिवर्तनों पर प्रतिक्रिया कर सकती है।
टेबलिंग को विभिन्न दिशाओं में बढ़ाया जा सकता है। यह एसएलजी-रिज़ॉल्यूशन या लीनियर टेबलिंग के माध्यम से पुनरावर्ती विधेय का समर्थन कर सकता है। बहु-थ्रेडेड प्रोलॉग प्रणाली में टेबलिंग परिणामों को थ्रेड के लिए निजी रखा जा सकता है या सभी थ्रेड्स के बीच साझा किया जा सकता है। और वृद्धिशील टेबलिंग में, टेबलिंग परिवर्तनों पर प्रतिक्रिया कर सकती है।


=== हार्डवेयर में कार्यान्वयन ===
=== हार्डवेयर में कार्यान्वयन ===
Line 454: Line 339:


== सीमाएं ==
== सीमाएं ==
यद्यपि अनुसंधान और शिक्षा में प्रोलॉग का व्यापक रूप से उपयोग किया जाता है,{{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 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>{{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" />






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


=== प्रकार ===
=== प्रकार ===
प्रोलॉग एक अप्रकाशित भाषा है। 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 = एपीटी | first1 = के.आर. | last2 = मार्चिओरी | first2 = ई. | title = प्रोलॉग प्रोग्राम के बारे में तर्क: मोड से प्रकार से अभिकथन तक| journal = कम्प्यूटिंग के औपचारिक पहलू | volume = 6 |  issue = एस1 | 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 = एपीटी | first1 = के.आर. | last2 = मार्चिओरी | first2 = ई. | title = प्रोलॉग प्रोग्राम के बारे में तर्क: मोड से प्रकार से अभिकथन तक| journal = कम्प्यूटिंग के औपचारिक पहलू | volume = 6 |  issue = एस1 | pages = 743 | year = 1994| url = http://www.cwi.nl/~apt/am.ps | citeseerx = 10.1.1.57.395 | s2cid = 12235465 }}</रेफरी>


=== मोड ===
=== मोड ===
Line 493: Line 378:
| 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]] वस्तु-उन्मुख ज्ञान प्रतिनिधित्व और तर्क प्रणाली है जो [[एफ तर्क]] पर आधारित है और इसमें हायलॉग, लेनदेन तर्क और दोषपूर्ण तर्क सम्मिलित है।


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


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


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


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


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


=== ग्राफिक्स ===
=== ग्राफिक्स ===
'''प्रोलॉग प्रणाली जो  प्रदान करते हैं वे हैं 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> विज़ुअल प्रोलॉग, विन-प्रोलॉग और बी-प्रोलॉग हैं।
[[ग्राफिक्स लाइब्रेरी]] प्रदान करने वाले प्रोलॉग प्रणाली एसडब्ल्यूआई-प्रोलॉग,<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> विज़ुअल प्रोलॉग, विन-प्रोलॉग और बी-प्रोलॉग हैं।


=== संगामिति ===
=== संगामिति ===
[[संदेश पासिंग इंटरफ़ेस]] पर वितरित कंप्यूटिंग के लिए प्रोलॉग-एमपीआई एक ओपन-सोर्स एसडब्ल्यूआई-प्रोलॉग एक्सटेंशन है।<ref>{{cite web|url=http://apps.lumii.lv/prolog-mpi/ |title=prolog-mpi |publisher=Apps.lumii.lv |access-date=2010-09-16}}</ref> साथ ही विभिन्न समवर्ती प्रोलॉग प्रोग्रामिंग भाषाएं भी हैं।<ref>Ehud Shapiro. ''The family of concurrent logic programming languages'' [[ACM Computing Surveys]]. September 1989.</ref>
[[संदेश पासिंग इंटरफ़ेस]] पर वितरित कंप्यूटिंग के लिए प्रोलॉग-एमपीआई ओपन-सोर्स एसडब्ल्यूआई-प्रोलॉग एक्सटेंशन है।<ref>{{cite web|url=http://apps.lumii.lv/prolog-mpi/ |title=prolog-mpi |publisher=Apps.lumii.lv |access-date=2010-09-16}}</ref> साथ ही विभिन्न समवर्ती प्रोलॉग प्रोग्रामिंग भाषाएं भी हैं।<ref>Ehud Shapiro. ''The family of concurrent logic programming languages'' [[ACM Computing Surveys]]. September 1989.</ref>




Line 531: Line 416:


=== एडोब फ्लैश ===
=== एडोब फ्लैश ===
[http://sites.google.com/site/cedarprolog/ सीडर] एक निःशुल्क और मूलभूत प्रोलॉग दुभाषिया है। संस्करण 4 और ऊपर के सीडर में एफसीए (फ्लैश सीडर ऐप) का समर्थन है। यह [[ActionScript|एक्शनस्क्रिप्ट]] के माध्यम से प्रोलॉग में प्रोग्रामिंग के लिए एक नया मंच प्रदान करता है।
[http://sites.google.com/site/cedarprolog/ सीडर] निःशुल्क और मूलभूत प्रोलॉग दुभाषिया है। संस्करण 4 और ऊपर के सीडर में एफसीए (फ्लैश सीडर ऐप) का समर्थन है। यह [[ActionScript|एक्शनस्क्रिप्ट]] के माध्यम से प्रोलॉग में प्रोग्रामिंग के लिए नया मंच प्रदान करता है।


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


Line 541: Line 426:
फ्रेमवर्क उपस्थित हैं जो प्रोलॉग और अन्य भाषाओं के बीच पुल कर सकते हैं:
फ्रेमवर्क उपस्थित हैं जो प्रोलॉग और अन्य भाषाओं के बीच पुल कर सकते हैं:
* [https://www.lpa.co.uk/int.htm एलपीए इंटेलिजेंस सर्वर] C के अन्दर [https://www.lpa.co.uk/win.htm एलपीए प्रोलॉग विंडोज के लिए] C#, C++, जावा, वीबी, डेल्फी, नेट, लुआ, पायथन और अन्य भाषाओँ को एम्बेड करने की अनुमति देता है। यह समर्पित स्ट्रिंग डेटा-प्रकार का शोषण करता है जो एलपीए प्रोलॉग प्रदान करता है।
* [https://www.lpa.co.uk/int.htm एलपीए इंटेलिजेंस सर्वर] C के अन्दर [https://www.lpa.co.uk/win.htm एलपीए प्रोलॉग विंडोज के लिए] C#, C++, जावा, वीबी, डेल्फी, नेट, लुआ, पायथन और अन्य भाषाओँ को एम्बेड करने की अनुमति देता है। यह समर्पित स्ट्रिंग डेटा-प्रकार का शोषण करता है जो एलपीए प्रोलॉग प्रदान करता है।
* लॉजिक सर्वर एपीआई सी, C++, जावा, वीबी, डेल्फी, .नेट और किसी भी भाषा/पर्यावरण में प्रोलॉग के विस्तार और एम्बेडिंग दोनों की अनुमति देता है जो .डीएलएल या .एसओ को कॉल कर सकता है। यह अमजी के लिए प्रयुक्त प्रोलॉग है, प्रोलॉग [http://www.amzi.com/ अमजी! प्रोलॉग + लॉजिक सर्वर] लेकिन एपीआई विनिर्देश किसी भी कार्यान्वयन के लिए उपलब्ध कराया जा सकता है।
* तर्क सर्वर एपीआई सी, C++, जावा, वीबी, डेल्फी, .नेट और किसी भी भाषा/पर्यावरण में प्रोलॉग के विस्तार और एम्बेडिंग दोनों की अनुमति देता है जो .डीएलएल या .एसओ को कॉल कर सकता है। यह अमजी के लिए प्रयुक्त प्रोलॉग है, प्रोलॉग [http://www.amzi.com/ अमजी! प्रोलॉग + तर्क सर्वर] लेकिन एपीआई विनिर्देश किसी भी कार्यान्वयन के लिए उपलब्ध कराया जा सकता है।
* [https://jpl7.org/ जेपीएल] एक द्वि-दिशात्मक जावा प्रोलॉग ब्रिज है जो डिफ़ॉल्ट रूप से एसडब्ल्यूआई-प्रोलॉग के साथ आता है, जिससे जावा और प्रोलॉग एक दूसरे को (रिकर्सिवली) कॉल कर सकते हैं। यह अच्छा संगामिति समर्थन के लिए जाना जाता है और सक्रिय विकास के अधीन है।
* [https://jpl7.org/ जेपीएल] द्वि-दिशात्मक जावा प्रोलॉग ब्रिज है जो डिफ़ॉल्ट रूप से एसडब्ल्यूआई-प्रोलॉग के साथ आता है, जिससे जावा और प्रोलॉग एक दूसरे को (रिकर्सिवली) कॉल कर सकते हैं। यह अच्छा संगामिति समर्थन के लिए जाना जाता है और सक्रिय विकास के अधीन है।
* [https://web.archive.org/web/20050406192103/http://www.declarativa.com/InterProlog/ इंटरप्रोलॉग], [[जावा मंच]] और प्रोलॉग के बीच एक प्रोग्रामिंग लाइब्रेरी ब्रिज, द्वि-दिशात्मक विधेय/विधि कॉलिंग के बीच कार्यान्वयन दोनों भाषाएँ है। जावा ऑब्जेक्ट्स को प्रोलॉग नियमो में मैप किया जा सकता है और इसके विपरीत। प्रोलॉग लेयर में लॉजिक प्रोसेसिंग को छोड़ते हुए जावा में ग्राफिकल यूजर इंटरफेस और अन्य कार्यक्षमता के विकास की अनुमति देता है। 2013 के लिए नियोजित एसडब्ल्यूआई-प्रोलॉग और वाईएपी (प्रोलॉग) के समर्थन के साथ एक्सएसबी का समर्थन करता है।
* [https://web.archive.org/web/20050406192103/http://www.declarativa.com/InterProlog/ इंटरप्रोलॉग], [[जावा मंच]] और प्रोलॉग के बीच प्रोग्रामिंग लाइब्रेरी ब्रिज, द्वि-दिशात्मक विधेय/विधि कॉलिंग के बीच कार्यान्वयन दोनों भाषाएँ है। जावा ऑब्जेक्ट्स को प्रोलॉग नियमो में मैप किया जा सकता है और इसके विपरीत। प्रोलॉग लेयर में तर्क प्रोसेसिंग को छोड़ते हुए जावा में ग्राफिकल यूजर इंटरफेस और अन्य कार्यक्षमता के विकास की अनुमति देता है। 2013 के लिए नियोजित एसडब्ल्यूआई-प्रोलॉग और वाईएपी (प्रोलॉग) के समर्थन के साथ एक्सएसबी का समर्थन करता है।
* प्रोवा जावा, एजेंट मैसेजिंग और प्रतिक्रिया नियमों के साथ देशी वाक्य-विन्यास एकीकरण प्रदान करता है। प्रोवा स्वयं को मिडलवेयर के लिए नियम-आधारित स्क्रिप्टिंग (आरबीएस) प्रणाली के रूप में रखता है। अनिवार्य प्रोग्रामिंग और घोषणात्मक प्रोग्रामिंग के संयोजन में भाषा नई जमीन बनाती है।
* प्रोवा जावा, एजेंट मैसेजिंग और प्रतिक्रिया नियमों के साथ देशी वाक्य-विन्यास एकीकरण प्रदान करता है। प्रोवा स्वयं को मिडलवेयर के लिए नियम-आधारित स्क्रिप्टिंग (आरबीएस) प्रणाली के रूप में रखता है। अनिवार्य प्रोग्रामिंग और घोषणात्मक प्रोग्रामिंग के संयोजन में भाषा नई जमीन बनाती है।
* [https://web.archive.org/web/20110221120826/http://www.igormaznitsa.com/projects/prol/index.html प्रोल] जावा के लिए एक एम्बेड करने योग्य प्रोलॉग इंजन। इसमें एक छोटा आईडीई और कुछ पुस्तकालय सम्मिलित हैं।
* [https://web.archive.org/web/20110221120826/http://www.igormaznitsa.com/projects/prol/index.html प्रोल] जावा के लिए एम्बेड करने योग्य प्रोलॉग इंजन। इसमें छोटा आईडीई और कुछ पुस्तकालय सम्मिलित हैं।
* [https://www.gnu.org/software/gnuprologjava/ जावा के लिए जीएनयू प्रोलॉग] जावा लाइब्रेरी के रूप में आईएसओ प्रोलॉग का कार्यान्वयन है (जीएनयू.प्रोलॉग)
* [https://www.gnu.org/software/gnuprologjava/ जावा के लिए जीएनयू प्रोलॉग] जावा लाइब्रेरी के रूप में आईएसओ प्रोलॉग का कार्यान्वयन है (जीएनयू.प्रोलॉग)
* किआओ (प्रोग्रामिंग भाषा) C, C++, जावा और रिलेशनल डेटाबेस को इंटरफेस प्रदान करता है।
* किआओ (प्रोग्रामिंग भाषा) C, C++, जावा और रिलेशनल डेटाबेस को इंटरफेस प्रदान करता है।
* [http://sourceforge.net/projects/cs-prolog/ C#-प्रोलॉग] एक प्रोलॉग दुभाषिया है जिसे (प्रबंधित) C# में लिखा गया है। C# प्रोग्राम में आसानी से एकीकृत किया जा सकता है। विशेषताएँ: विश्वसनीय और अत्यधिक तेज़ दुभाषिया, कमांड लाइन इंटरफ़ेस, विंडोज-इंटरफ़ेस, बिल्ट-इन डीसीजी, एक्सएमएल-विधेय, एसक्यूएल-विधेय विस्तारणीय। संपूर्ण स्रोत कोड उपलब्ध है, जिसमें एक पार्सर जनरेटर भी सम्मिलित है जिसका उपयोग विशेष उद्देश्य एक्सटेंशन जोड़ने के लिए किया जा सकता है।
* [http://sourceforge.net/projects/cs-prolog/ C#-प्रोलॉग] प्रोलॉग दुभाषिया है जिसे (प्रबंधित) C# में लिखा गया है। C# प्रोग्राम में आसानी से एकीकृत किया जा सकता है। विशेषताएँ: विश्वसनीय और अत्यधिक तेज़ दुभाषिया, कमांड लाइन इंटरफ़ेस, विंडोज-इंटरफ़ेस, बिल्ट-इन डीसीजी, एक्सएमएल-विधेय, एसक्यूएल-विधेय विस्तारणीय। संपूर्ण स्रोत कोड उपलब्ध है, जिसमें पार्सर जनरेटर भी सम्मिलित है जिसका उपयोग विशेष उद्देश्य एक्सटेंशन जोड़ने के लिए किया जा सकता है।
* [https://github.com/Trismegiste/WamBundle पीएचपी के लिए वॉरेन सार मशीन] पीएचपी 5.3 में एक प्रोलॉग कंपाइलर और दुभाषिया है। एक पुस्तकालय जिसे स्टैंडअलोन या सिम्फनी 2.1 ढांचे के अन्दर उपयोग किया जा सकता है जिसे जावा में [http://stefan.buettcher.org/ स्टीफ़न बुएचर '''का''' '''Buettcher's'''] कार्य से अनुवादित किया गया था जिसे [{{URL|http://stefan.buettcher.org/cs/wam/index.html}}] यहाँ पाया जा सकता है।
* [https://github.com/Trismegiste/WamBundle पीएचपी के लिए वॉरेन सार मशीन] पीएचपी 5.3 में प्रोलॉग कंपाइलर और दुभाषिया है। पुस्तकालय जिसे स्टैंडअलोन या सिम्फनी 2.1 ढांचे के अन्दर उपयोग किया जा सकता है जिसे जावा में [http://stefan.buettcher.org/ स्टीफ़न बुएचर] कार्य से अनुवादित किया गया था जिसे [{{URL|http://stefan.buettcher.org/cs/wam/index.html}}] यहाँ पाया जा सकता है।
* [https://web.archive.org/web/20190317003033/http://apice.unibo.it/xwiki/bin/view/Tuprolog/WebHome ट्यूप्रोलॉग] वितरित अनुप्रयोगों और मूलभूत ढांचे के लिए एक हल्का प्रोलॉग प्रणाली है, सविचार एक न्यूनतम कोर के आसपास डिज़ाइन किया गया है, या तो वैधानिक रूप से या गतिशील रूप से विधेय के पुस्तकालयों को लोड / अनलोड करके विन्यस्त किया गया है। ट्यूप्रोलॉग मूल रूप से बहु-प्रतिमान प्रोग्रामिंग का समर्थन करता है, प्रोलॉग और मुख्यधारा की वस्तु-उन्मुख भाषाओं जावा, ट्यूप्रोलॉग जावा संस्करण के लिए, और कोई भी .नेट- आधारित भाषा (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>
* [https://web.archive.org/web/20190317003033/http://apice.unibo.it/xwiki/bin/view/Tuprolog/WebHome ट्यूप्रोलॉग] वितरित अनुप्रयोगों और मूलभूत ढांचे के लिए हल्का प्रोलॉग प्रणाली है, सविचार न्यूनतम कोर के आसपास डिज़ाइन किया गया है, या तो वैधानिक रूप से या गतिशील रूप से विधेय के पुस्तकालयों को लोड / अनलोड करके विन्यस्त किया गया है। ट्यूप्रोलॉग मूल रूप से बहु-प्रतिमान प्रोग्रामिंग का समर्थन करता है, प्रोलॉग और मुख्यधारा की वस्तु-उन्मुख भाषाओं जावा, ट्यूप्रोलॉग जावा संस्करण के लिए, और कोई भी .नेट- आधारित भाषा (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|प्रोग्राम एन लॉजिक}} ([[तर्क]] में प्रोग्रामिंग के लिए फ्रेंच भाषा) प्रोलॉग नाम फिलिप रसेल द्वारा संक्षिप्त नाम के रूप में चुना गया था। यह 1972 के आसपास एलेन कॉलमेरॉयर द्वारा फिलिप रसेल के साथ बनाया गया था, जो रॉबर्ट कोवाल्स्की की हॉर्न क्लॉज की प्रक्रियात्मक व्याख्या पर आधारित था। यह 1960 के दशक के अंत और 1970 के दशक के प्रारंभ में उत्तरी अमेरिका में प्रचलित ज्ञान के प्रक्रियात्मक प्रतिनिधित्व के साथ एक घोषणात्मक ज्ञान प्रतिनिधित्व भाषा के रूप में तर्क के उपयोग को समेटने की इच्छा से प्रेरित था। रॉबर्ट कोवाल्स्की के अनुसार, पहला प्रोलॉग प्रणाली 1972 में कोलमेरौएर और फिलिप रसेल द्वारा विकसित किया गया था।<ref name="Kowalski"/> प्रोलॉग का पहला कार्यान्वयन जेरार्ड बट्टानी और हेनरी मेलोनी द्वारा फोरट्रान में लिखा गया एक दुभाषिया था। डेविड एच.डी. वारेन इस दुभाषिया को एडिनबर्ग विश्वविद्यालय ले गए, और वहां एक वैकल्पिक फ्रंट-एंड प्रयुक्त किया, जो अधिकांश आधुनिक कार्यान्वयनों द्वारा उपयोग किए जाने वाले "एडिनबर्ग प्रोलॉग" वाक्य-विन्यास को परिभाषित करने के लिए आया था। वारेन ने फर्नांडो परेरा के सहयोग से प्रभावशाली दिसम्बर-10 प्रोलॉग का निर्माण करते हुए प्रोलॉग के लिए पहला संकलक भी प्रयुक्त किया था। वॉरेन सार मशीन बनाने के लिए वॉरेन ने बाद में दिसम्बर-10 प्रोलॉग के पीछे के विचारों को सामान्यीकृत किया था।
{{lang|fr|प्रोग्राम एन लॉजिक}} ([[तर्क]] में प्रोग्रामिंग के लिए फ्रेंच भाषा) प्रोलॉग नाम फिलिप रसेल द्वारा संक्षिप्त नाम के रूप में चुना गया था। यह 1972 के आसपास एलेन कॉलमेरॉयर द्वारा फिलिप रसेल के साथ बनाया गया था, जो रॉबर्ट कोवाल्स्की की हॉर्न क्लॉज की प्रक्रियात्मक व्याख्या पर आधारित था। यह 1960 के दशक के अंत और 1970 के दशक के प्रारंभ में उत्तरी अमेरिका में प्रचलित ज्ञान के प्रक्रियात्मक प्रतिनिधित्व के साथ घोषणात्मक ज्ञान प्रतिनिधित्व भाषा के रूप में तर्क के उपयोग को समेटने की इच्छा से प्रेरित था। रॉबर्ट कोवाल्स्की के अनुसार, पहला प्रोलॉग प्रणाली 1972 में कोलमेरौएर और फिलिप रसेल द्वारा विकसित किया गया था।<ref name="Kowalski"/> प्रोलॉग का पहला कार्यान्वयन जेरार्ड बट्टानी और हेनरी मेलोनी द्वारा फोरट्रान में लिखा गया दुभाषिया था। डेविड एच.डी. वारेन इस दुभाषिया को एडिनबर्ग विश्वविद्यालय ले गए, और वहां वैकल्पिक फ्रंट-एंड प्रयुक्त किया, जो अधिकांश आधुनिक कार्यान्वयनों द्वारा उपयोग किए जाने वाले "एडिनबर्ग प्रोलॉग" वाक्य-विन्यास को परिभाषित करने के लिए आया था। वारेन ने फर्नांडो परेरा के सहयोग से प्रभावशाली दिसम्बर-10 प्रोलॉग का निर्माण करते हुए प्रोलॉग के लिए पहला संकलक भी प्रयुक्त किया था। वॉरेन सार मशीन बनाने के लिए वॉरेन ने बाद में दिसम्बर-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|के एल1]] नामक प्रोलॉग का एक संस्करण विकसित किया गया था।
यूरोपीय एआई शोधकर्ताओं ने प्रोलॉग का समर्थन किया, जबकि अमेरिकियों ने [[लिस्प (प्रोग्रामिंग भाषा)]] का समर्थन किया, कथित तौर पर भाषाओं की खूबियों पर कई राष्ट्रवादी बहसें हुईं।<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|के एल1]] नामक प्रोलॉग का संस्करण विकसित किया गया था।


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


  H:- B<sub>1</sub>, ..., B<sub>n</sub>.
  ''H:- B<sub>1</sub>, ..., B<sub>n</sub>.''


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


  to show/solve H, show/solve B<sub>1</sub> and ... and B<sub>n</sub>.
  ''to show/solve H, show/solve B<sub>1</sub> and ... and B<sub>n</sub>.''


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


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


== यह भी देखें ==
== यह भी देखें ==
* [[प्रोलॉग कार्यान्वयन की तुलना]]।
* [[प्रोलॉग कार्यान्वयन की तुलना]]।
* [[तार्किक-भाषाई मॉडलिंग]], प्रोलॉग का उपयोग करने वाली ज्ञान-आधारित प्रणाली के निर्माण की एक विधि।
* [[तार्किक-भाषाई मॉडलिंग]], प्रोलॉग का उपयोग करने वाली ज्ञान-आधारित प्रणाली के निर्माण की विधि।
* [[उत्तर सेट प्रोग्रामिंग]], तर्क प्रोग्रामिंग के लिए एक पूरी तरह से घोषणात्मक दृष्टिकोण।
* [[उत्तर सेट प्रोग्रामिंग]], तर्क प्रोग्रामिंग के लिए पूरी तरह से घोषणात्मक दृष्टिकोण।
* [[तर्क प्रोग्रामिंग के लिए एसोसिएशन]]।
* [[तर्क प्रोग्रामिंग के लिए एसोसिएशन]]।


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


==संदर्भ==
==संदर्भ==
Line 616: Line 501:
{{Programming languages}}
{{Programming languages}}
{{ISO standards}}
{{ISO standards}}
{{Authority control}}

Revision as of 11:58, 27 February 2023

प्रोलॉग
Paradigmतर्क
द्वारा डिज़ाइन किया गयाएलेन कॉलमेरॉयर, रॉबर्ट कोवाल्स्की
पहली प्रस्तुतिTemplate:प्रारंभ तिथि और उम्र
Stable release
Part 1: सामान्य कोर-संस्करण 1 (Template:प्रारंभ तिथि और उम्र)
Part 2: मॉड्यूल-संस्करण 1 (Template:प्रारंभ तिथि और उम्र)
टाइपिंग अनुशासनअनटाइप्ड (इसका एकल डेटा प्रकार "टर्म" है)
फ़ाइल नाम एक्सटेंशनएस.pl, .pro, .P
वेबसाइटPart 1: www.iso.org/standard/21413.html
Part 2: www.iso.org/standard/20775.html
Major implementations
बी-प्रोलॉग, सियाओ, ईसीएलआईपीएसई, जीएनयू प्रोलॉग, प्रोलॉग प्रोलॉग, पी#, Quintus Prolog, एसआईसीस्टस, Strawberry, एसडब्ल्यूआई-प्रोलॉग, Tau Prolog, tuProlog, विन-प्रोलॉग, एक्सएसबी, वाईएपी.
Dialects
आईएसओ प्रोलॉग, एडिनबर्ग प्रोलॉग
Influenced by
योजनाकर्ता
Influenced
सीएचआर, क्लोजर, डाटालॉग, एर्लंग, केएल0, केएल1, लॉगटॉक, मरकरी, ओजेड, स्ट्रैंड, विजुअल प्रोलॉग, एक्सएसबी

प्रोलॉग तर्क प्रोग्रामिंग भाषा है जो कृत्रिम सावधानी और कम्प्यूटेशनल भाषा विज्ञान से जुड़ी है।[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.

?-

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

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

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

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

    optimization_pass_3(Prog2, Prog).

क्विकसॉर्ट

त्वरित छँटाई कलनविधि, सूची को उसके क्रमबद्ध संस्करण से संबंधित करता है:

  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 प्रीप्रोसेसर द्वारा विस्तारित किया गया है, अन्य भाषाओं में मैक्रोज़ के अनुरूप सुविधा) कुछ सीधे पुनर्लेखन नियमों के अनुसार, जिसके परिणामस्वरूप सामान्य प्रोलॉग खंड होते हैं। सबसे विशेष रूप से, पुनर्लेखन विधेय को दो अतिरिक्त तर्कों से लैस करता है, जिसका उपयोग अन्य भाषाओं में कार्यात्मक प्रोग्रामिंग में मोनैड के समान आस-पास की स्थिति को थ्रेड करने के लिए किया जा सकता है। डीसीजी का उपयोग अधिकांशतः पार्सर्स या सूची जनरेटर लिखने के लिए किया जाता है, क्योंकि वे अंतर सूचियों के लिए सुविधाजनक इंटरफ़ेस भी प्रदान करते हैं।

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

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

  solve(true).
solve((Subgoal1,Subgoal2)):- 
    solve(Subgoal1),
    solve(Subgoal2).
solve(Head):- 
    clause(Head, Body),
    solve(Body).

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

चूंकि प्रोलॉग कार्यक्रम स्वयं प्रोलॉग नियमो के अनुक्रम हैं (:-/2 इंफिक्स ऑपरेटर) है जिसे अंतर्निहित तंत्र (जैसे read/1), अनुकूलित दुभाषियों को लिखना संभव है जो डोमेन-विशिष्ट विशेषताओं के साथ प्रोलॉग को बढ़ाते हैं।

उदाहरण के लिए, स्टर्लिंग और शापिरो मेटा-दुभाषिया प्रस्तुत करते हैं जो अनिश्चितता के साथ तर्क करता है, यहां सामान्य संशोधनों के साथ पुन: प्रस्तुत किया गया है:[30]: 330 

  solve(true, 1):-!.
solve((Subgoal1,Subgoal2), Certainty):-
   !,
    solve(Subgoal1, Certainty1),
    solve(Subgoal2, Certainty2),
    Certainty is min(Certainty1, Certainty2).
solve(Goal, 1):-
    builtin(Goal),!, 
    Goal.
solve(Head, Certainty):-
    clause_cf(Head, Body, Certainty1),
    solve(Body, Certainty2),
    Certainty is Certainty1 * Certainty2.

यह दुभाषिया फॉर्म के अंतर्निर्मित प्रोलॉग की तालिका का उपयोग करता है[30]: 327 

builtin(A is B).
builtin(read(X)).
% etc.

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

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

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

  turing(Tape0, Tape):-
    perform(q0, [], Ls, Tape0, Rs),
    reverse(Ls, Ls1),
    append(Ls1, Rs, Tape).
 
perform(qf, Ls, Ls, Rs, Rs):-!.
perform(Q0, Ls0, Ls, Rs0, Rs):-
    symbol(Rs0, Sym, RsRest),
    once(rule(Q0, Sym, Q1, NewSym, Action)),
    action(Action, Ls0, Ls1, [NewSym|RsRest], Rs1),
    perform(Q1, Ls1, Ls, Rs1, Rs).
 
symbol([], b, []).
symbol([Sym|Rs], Sym, Rs).
 
action(left, Ls0, Ls, Rs0, Rs):- left(Ls0, Ls, Rs0, Rs).
action(stay, Ls, Ls, Rs, Rs).
action(right, Ls0, [Sym|Ls0], [Sym|Rs], Rs).
 
left([], [], Rs0, [b|Rs0]).
left([L|Ls], Ls, Rs, [L|Rs]).

ट्यूरिंग मशीन का सरल उदाहरण तथ्यों द्वारा निर्दिष्ट किया गया है:

rule(q0, 1, q0, 1, right).
rule(q0, b, qf, 1, stay).

यह मशीन यूनरी एन्कोडिंग में किसी संख्या से वृद्धि करती है: यह "1" सेल की किसी भी संख्या पर लूप करती है और अंत में अतिरिक्त "1" जोड़ती है। उदाहरण क्वेरी और परिणाम:

?- turing([1,1,1], Ts).
Ts = [1, 1, 1, 1];

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

कार्यान्वयन


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

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



संकलन

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


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

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

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

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


हैशिंग

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

टेबलिंग

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

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

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

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

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

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


सीमाएं

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

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

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


एक्सटेंशन

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

प्रकार

प्रोलॉग अप्रकाशित भाषा है। 1980 के दशक के प्रकारों को प्रस्तुत करने का प्रयास,[57][58] और 2008 तक अभी भी प्रोलॉग को प्रकारों के साथ विस्तारित करने का प्रयास किया जा रहा है।[59] इस प्रकार की जानकारी न केवल प्रकार की सुरक्षा के लिए उपयोगी है किन्तु प्रोलॉग प्रोग्राम के बारे में तर्क करने के लिए भी उपयोगी है। एपीटी, के.आर.; मार्चिओरी, ई. (1994). "प्रोलॉग प्रोग्राम के बारे में तर्क: मोड से प्रकार से अभिकथन तक". कम्प्यूटिंग के औपचारिक पहलू. 6 (एस1): 743. CiteSeerX 10.1.1.57.395. doi:10.1007/BF01213601. S2CID 12235465.</रेफरी>

मोड

मोड विनिर्देशक व्याख्या
+ nonvar प्रवेश पर
- var प्रवेश पर
? निर्दिष्ट नहीं है

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


बाधाएं

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

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

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

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

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

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

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

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

ग्राफिक्स

ग्राफिक्स लाइब्रेरी प्रदान करने वाले प्रोलॉग प्रणाली एसडब्ल्यूआई-प्रोलॉग,[66] विज़ुअल प्रोलॉग, विन-प्रोलॉग और बी-प्रोलॉग हैं।

संगामिति

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


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

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

एडोब फ्लैश

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

अन्य

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

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

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

  • एलपीए इंटेलिजेंस सर्वर C के अन्दर एलपीए प्रोलॉग विंडोज के लिए C#, C++, जावा, वीबी, डेल्फी, नेट, लुआ, पायथन और अन्य भाषाओँ को एम्बेड करने की अनुमति देता है। यह समर्पित स्ट्रिंग डेटा-प्रकार का शोषण करता है जो एलपीए प्रोलॉग प्रदान करता है।
  • तर्क सर्वर एपीआई सी, C++, जावा, वीबी, डेल्फी, .नेट और किसी भी भाषा/पर्यावरण में प्रोलॉग के विस्तार और एम्बेडिंग दोनों की अनुमति देता है जो .डीएलएल या .एसओ को कॉल कर सकता है। यह अमजी के लिए प्रयुक्त प्रोलॉग है, प्रोलॉग अमजी! प्रोलॉग + तर्क सर्वर लेकिन एपीआई विनिर्देश किसी भी कार्यान्वयन के लिए उपलब्ध कराया जा सकता है।
  • जेपीएल द्वि-दिशात्मक जावा प्रोलॉग ब्रिज है जो डिफ़ॉल्ट रूप से एसडब्ल्यूआई-प्रोलॉग के साथ आता है, जिससे जावा और प्रोलॉग एक दूसरे को (रिकर्सिवली) कॉल कर सकते हैं। यह अच्छा संगामिति समर्थन के लिए जाना जाता है और सक्रिय विकास के अधीन है।
  • इंटरप्रोलॉग, जावा मंच और प्रोलॉग के बीच प्रोग्रामिंग लाइब्रेरी ब्रिज, द्वि-दिशात्मक विधेय/विधि कॉलिंग के बीच कार्यान्वयन दोनों भाषाएँ है। जावा ऑब्जेक्ट्स को प्रोलॉग नियमो में मैप किया जा सकता है और इसके विपरीत। प्रोलॉग लेयर में तर्क प्रोसेसिंग को छोड़ते हुए जावा में ग्राफिकल यूजर इंटरफेस और अन्य कार्यक्षमता के विकास की अनुमति देता है। 2013 के लिए नियोजित एसडब्ल्यूआई-प्रोलॉग और वाईएपी (प्रोलॉग) के समर्थन के साथ एक्सएसबी का समर्थन करता है।
  • प्रोवा जावा, एजेंट मैसेजिंग और प्रतिक्रिया नियमों के साथ देशी वाक्य-विन्यास एकीकरण प्रदान करता है। प्रोवा स्वयं को मिडलवेयर के लिए नियम-आधारित स्क्रिप्टिंग (आरबीएस) प्रणाली के रूप में रखता है। अनिवार्य प्रोग्रामिंग और घोषणात्मक प्रोग्रामिंग के संयोजन में भाषा नई जमीन बनाती है।
  • प्रोल जावा के लिए एम्बेड करने योग्य प्रोलॉग इंजन। इसमें छोटा आईडीई और कुछ पुस्तकालय सम्मिलित हैं।
  • जावा के लिए जीएनयू प्रोलॉग जावा लाइब्रेरी के रूप में आईएसओ प्रोलॉग का कार्यान्वयन है (जीएनयू.प्रोलॉग)
  • किआओ (प्रोग्रामिंग भाषा) C, C++, जावा और रिलेशनल डेटाबेस को इंटरफेस प्रदान करता है।
  • C#-प्रोलॉग प्रोलॉग दुभाषिया है जिसे (प्रबंधित) C# में लिखा गया है। C# प्रोग्राम में आसानी से एकीकृत किया जा सकता है। विशेषताएँ: विश्वसनीय और अत्यधिक तेज़ दुभाषिया, कमांड लाइन इंटरफ़ेस, विंडोज-इंटरफ़ेस, बिल्ट-इन डीसीजी, एक्सएमएल-विधेय, एसक्यूएल-विधेय विस्तारणीय। संपूर्ण स्रोत कोड उपलब्ध है, जिसमें पार्सर जनरेटर भी सम्मिलित है जिसका उपयोग विशेष उद्देश्य एक्सटेंशन जोड़ने के लिए किया जा सकता है।
  • पीएचपी के लिए वॉरेन सार मशीन पीएचपी 5.3 में प्रोलॉग कंपाइलर और दुभाषिया है। पुस्तकालय जिसे स्टैंडअलोन या सिम्फनी 2.1 ढांचे के अन्दर उपयोग किया जा सकता है जिसे जावा में स्टीफ़न बुएचर कार्य से अनुवादित किया गया था जिसे [stefan.buettcher.org/cs/wam/index.html] यहाँ पाया जा सकता है।
  • ट्यूप्रोलॉग वितरित अनुप्रयोगों और मूलभूत ढांचे के लिए हल्का प्रोलॉग प्रणाली है, सविचार न्यूनतम कोर के आसपास डिज़ाइन किया गया है, या तो वैधानिक रूप से या गतिशील रूप से विधेय के पुस्तकालयों को लोड / अनलोड करके विन्यस्त किया गया है। ट्यूप्रोलॉग मूल रूप से बहु-प्रतिमान प्रोग्रामिंग का समर्थन करता है, प्रोलॉग और मुख्यधारा की वस्तु-उन्मुख भाषाओं जावा, ट्यूप्रोलॉग जावा संस्करण के लिए, और कोई भी .नेट- आधारित भाषा (C#, F#..), ट्यूप्रोलॉग के लिए .नेट संस्करण के बीच स्वच्छ, सहज एकीकरण मॉडल प्रदान करता है।[73]


इतिहास

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

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

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

H:- B1, ..., Bn.

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

to show/solve H, show/solve B1 and ... and Bn.

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

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

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

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

यह भी देखें

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

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

संदर्भ

  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


अग्रिम पठन