2015-11-05 7 views
8

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

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

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

+0

शायद, cs.stackexchange.com पूछने के लिए एक बेहतर जगह है। –

+1

@tobyodavies सही है, एसएटी सॉल्वर प्रोलॉग की तरह केंद्रीय नहीं हैं, पूरी प्रोग्रामिंग भाषाओं को ट्यूरिंग करते हैं। हालांकि तर्क प्रोग्रामिंग के लिए अलग-अलग शैलियों हैं, लेकिन शायद वे नहीं हैं जो आप बाद में हैं। –

+0

आपकी कार्यान्वयन भाषा क्या होगी? – repeat

उत्तर

4

Warren Abstract Machine देखें अगर आप समझना चाहते हैं कि प्रोलॉग कंपाइलर्स और दुभाषियों को कैसे लागू किया जाता है।

तर्क चर के लिए मूल विचार यह है कि वे या तो एक शब्द, मुक्त, या एक अलग तर्क चर के लिए aliased के लिए बाध्य हैं।

+0

मुझे डर है कि संदर्भ प्रदान करने के मेरे प्रयास से कुछ भ्रम हो सकता है (जब मुझे मौका मिलता है तो मैं उसे साफ़ करने के लिए संपादित कर दूंगा)। मैं वास्तव में केवल शीर्षक में प्रश्न पूछ रहा हूं। मैं नहीं पूछ रहा हूं कि प्रोलॉग कंपाइलर या दुभाषिया को कैसे कार्यान्वित किया जाए। क्या तर्क चर केवल Prolog-ish पर्यावरण के संदर्भ में समझ में आता है? मुझे ऐसा नहीं लगता है, लेकिन अगर ऐसा है तो यह जानने में मदद करेगा क्यों। किसी भी मामले में, मुझे लगता है कि डब्ल्यूएएम में लॉजिक वेरिएबल्स का कार्यान्वयन होना चाहिए जो मैं पढ़ सकता हूं? –

+1

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

+0

यह * बिल्कुल * उस तरह की जानकारी है जिसे मैं ढूंढ रहा था। धन्यवाद! तर्क चर के लिए एलपी भाषा की आवश्यकता पर आपकी टिप्पणी को देखते हुए, क्या आपके पास इस तरह के काम पर कोई विचार है: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.1931? क्या आप इसे एलपी भाषा आधार पर निर्मित एफपी भाषा के रूप में देखेंगे? मुझे लगता है कि (छोटे) से, एक रैखिक तर्क नींव पारंपरिक एलपी प्रतिमान से निश्चित रूप से अलग लगता है ... –

1

आंशिक उत्तर, केवल तार्किक चर की धारणा से संबंधित है।

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

?- V = a(Y). 
V = a(Y). 

?- V = a(Y), V = a(1). 
V = a(1), 
Y = 1. 

, चर V, आगेएकीकृत चर यह होता है, Y द्वारा instantiated है पूर्णांक 1 साथ। =/2 ऑपरेटर प्रोलॉग एकीकरण ऑपरेटर है। एकीकरण एक तार्किक ऑपरेशन है जो सच है जब आप दो शर्तों को ले सकते हैं और संभवतः बाध्यकारी बाध्यकारी शब्द को दूसरे कार्यकाल में उप-अवधि में एक शब्द में जोड़ सकते हैं।

1

कार्यान्वयन में मुख्य भेद structure sharing बनाम structure copying है। इसके लिए गुगलिंग कई संसाधनों को ध्यान में लाती है ...

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

+0

आप अपने प्रोलॉग दुभाषिया में कचरा संग्रहण कैसे करते हैं? – repeat

+0

@repeat: कोई नहीं है, मैं ज्यादातर खोजल का उपयोग करता हूं, इसलिए 'उत्पादित' के दौरान शब्दों की प्रतिलिपि बनाई गई थी ... – CapelliC

+0

https://en.m.wikipedia.org/wiki/Boehm_garbage_collector के बारे में कैसे? – repeat

संबंधित मुद्दे

 संबंधित मुद्दे