प्रोलॉग

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

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

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

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

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


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

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

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

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

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

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

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

अंतर्निहित विधेय  हमेशा सच होता है।

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

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

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

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

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

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

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

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

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

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

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

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

<वाक्यविन्यास लैंग = प्रोलॉग> ?- सहोदर (सैली, एरिका)। हाँ 

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

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

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

लूप और रिकर्सन
पुनरावर्ती विधेय के माध्यम से इटरेटिव एल्गोरिदम को लागू किया जा सकता है।

नकार
बिल्ट-इन प्रोलॉग विधेय  विफलता के रूप में निषेध प्रदान करता है, जो गैर-मोनोटोनिक तर्क | गैर-मोनोटोनिक तर्क के लिए अनुमति देता है। लक्ष्य   नियम में

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

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

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

?- 

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

<वाक्यविन्यास लैंग = प्रोलॉग> प्रोग्राम_ऑप्टिमाइज्ड (प्रोग0, प्रोग) :- अनुकूलन_पास_1(प्रोग0, प्रोग1), ऑप्टिमाइज़ेशन_पास_2(प्रोग1, प्रोग2), अनुकूलन_पास_3 (प्रोग 2, प्रोग)। 

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

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

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

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

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

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

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

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

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

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

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

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

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

<वाक्यविन्यास लैंग = प्रोलॉग> हल (सच)। हल((सबगोल1,सबगोल2)) :- हल करें (सबगोल 1), हल करें (सबगोल 2)। हल (सिर) :- खंड (सिर, शरीर), हल (शरीर)।  कहाँ  एक खाली संयोजन का प्रतिनिधित्व करता है, और   प्रपत्र के डेटाबेस में खंडों के साथ एकीकृत करता है.

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

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

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

ट्यूरिंग पूर्णता
प्योर प्रोलॉग फर्स्ट-ऑर्डर प्रेडिकेट लॉजिक, हॉर्न क्लॉज के सबसेट पर आधारित है, जो ट्यूरिंग पूर्णता है। ट्यूरिंग-पूर्ण। ट्यूरिंग मशीन का अनुकरण करने के लिए प्रोलॉग की ट्यूरिंग पूर्णता को इसका उपयोग करके दिखाया जा सकता है: <वाक्यविन्यास लैंग = प्रोलॉग> ट्यूरिंग(टेप0, टेप) :- प्रदर्शन (क्यू0, [], एलएस, टेप0, रुपये), रिवर्स (एलएस, एलएस 1), संलग्न करें (एलएस 1, रुपये, टेप)। प्रदर्शन (क्यूएफ, एलएस, एलएस, रुपये, रुपये) :- !. प्रदर्शन (Q0, Ls0, Ls, Rs0, Rs): - प्रतीक (रु0, सिम, रु.रेस्ट), एक बार (नियम (Q0, Sym, Q1, NewSym, Action)), कार्रवाई (कार्रवाई, Ls0, Ls1, [NewSym|RsRest], Rs1), प्रदर्शन (Q1, Ls1, Ls, Rs1, Rs)। प्रतीक ([], बी, [])। प्रतीक ([Sym | रुपये], प्रतीक, रुपये)। कार्रवाई (बाएं, एलएस0, एलएस, रुपये0, रुपये) :- बाएं (एलएस0, एलएस, रुपये0, रुपये)। कार्रवाई (रहना, एलएस, एलएस, रुपये, रुपये)। कार्रवाई (दाएं, Ls0, [Sym|Ls0], [Sym|Rs], रुपये)। बाएं ([], [], रुपये0, [बी|रुपये0])। बायां ([एल | एलएस], एलएस, रुपये, [एल | रुपये])। 

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

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

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

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

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

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

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

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

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

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

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

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

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

प्रकार
प्रोलॉग एक अप्रकाशित भाषा है। 1980 के दशक के प्रकारों को पेश करने का प्रयास, और 2008 तक अभी भी प्रोलॉग को प्रकारों के साथ विस्तारित करने का प्रयास किया जा रहा है। प्रकार की जानकारी न केवल प्रकार की सुरक्षा के लिए उपयोगी है बल्कि प्रोलॉग प्रोग्राम के बारे में तर्क करने के लिए भी उपयोगी है।</रेफरी>

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

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

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

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

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

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

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

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

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

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

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

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

अन्य

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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

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

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

अग्रिम पठन

 * Ivan Bratko, Prolog Programming for Artificial Intelligence, 4th ed., 2012, ISBN 978-0-321-41746-6. Book supplements and source code
 * William F. Clocksin, Christopher S. Mellish: Programming in Prolog: Using the ISO Standard. Springer, 5th ed., 2003, ISBN 978-3-540-00678-7. (This edition is updated for ISO Prolog. Previous editions described Edinburgh Prolog.)
 * William F. Clocksin: Clause and Effect. Prolog Programming for the Working Programmer. Springer, 2003, ISBN 978-3-540-62971-9.
 * Michael A. Covington, Donald Nute, Andre Vellino, Prolog Programming in Depth, 1996, ISBN 0-13-138645-X.
 * Michael A. Covington, Natural Language Processing for Prolog Programmers, 1994, ISBN 978-0-13-629213-5
 * M. S. Dawe and C.M.Dawe, Prolog for Computer Sciences, Springer Verlag 1992.
 * ISO/IEC 13211: Information technology &mdash; Programming languages &mdash; Prolog. International Organization for Standardization, Geneva.
 * Feliks Kluźniak and Stanisław Szpakowicz (with a contribution by Janusz S. Bień). Prolog for Programmers. Academic Press Inc. (London), 1985, 1987 (available under a Creative Commons license at https://sites.google.com/site/prologforprogrammers/). ISBN 0-12-416521-4.
 * Richard O'Keefe, The Craft of Prolog, ISBN 0-262-15039-5.
 * Robert Smith, John Gibson, Aaron Sloman: 'POPLOG's two-level virtual machine support for interactive languages', in Research Directions in Cognitive Science Volume 5: Artificial Intelligence, Eds D. Sleeman and N. Bernsen, Lawrence Erlbaum Associates, pp 203–231, 1992.
 * Leon Sterling and Ehud Shapiro, The Art of Prolog: Advanced Programming Techniques, 1994, ISBN 0-262-19338-8.
 * David H D Warren, Luis M. Pereira and Fernando Pereira, Prolog - the language and its implementation compared with Lisp. ACM SIGART Bulletin archive, Issue 64. Proceedings of the 1977 symposium on Artificial intelligence and programming languages, pp 109–115.
 * David H D Warren, Luis M. Pereira and Fernando Pereira, Prolog - the language and its implementation compared with Lisp. ACM SIGART Bulletin archive, Issue 64. Proceedings of the 1977 symposium on Artificial intelligence and programming languages, pp 109–115.