विशुद्ध रूप से कार्यात्मक भाषा में एक प्रोलॉग दुभाषिया कैसे लागू करें?


25

वहाँ एक स्पष्ट संदर्भ है, छद्म कोड के साथ, कैसे एक शुद्ध रूप से कार्यात्मक भाषा में एक प्रोलॉग दुभाषिया को लागू करने के बारे में जाने के लिए? जो मैंने अब तक पाया है वह केवल अनिवार्य भाषाओं से निपटने के लिए लगता है, यह केवल अपने आप में लागू प्रोलॉग का प्रदर्शन है, या व्याख्या के लिए उपयोग करने के लिए कोई ठोस एल्गोरिदम प्रदान नहीं करता है। मैं एक उत्तर की बहुत सराहना करूंगा।


4
Patrice Boizumault द्वारा प्रोलॉग (कंप्यूटर विज्ञान में प्रिंसटन श्रृंखला) का कार्यान्वयन लिस्प कार्यान्वयन है।
विल नेस

अपेक्षाकृत नए दृष्टिकोण के लिए इस उत्तर को देखें ।
झूठी

जवाबों:


24

चूँकि प्रोलॉग = सिंथैटिक यूनीफिकेशन + बैकवर्ड चेनिंग + REPL

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

तीनों भागों के साथ एक अन्य स्रोत कृत्रिम बुद्धिमत्ता प्रोग्रामिंग के प्रतिमानों में पाया जा सकता है : पीटर नॉरविग द्वारा कॉमन लिस्प में केस अध्ययन । अध्याय 11, लॉजिक प्रोग्रामिंग और 12, लॉजिक लॉजिक प्रोग्राम देखें। उनकी पुस्तक का कोड यहां पाया जा सकता है

एक अन्य स्रोत हैल एबेल्सन, जेरी सुसमैन और जूली सुस्मान द्वारा कंप्यूटर कार्यक्रमों की संरचना और व्याख्या है । देखें खंड 4.4 तर्क प्रोग्रामिंग। पुस्तक के लिए साइट यहाँ है और पुस्तक के लिए कोड यहाँ है

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

प्रोलॉग के एक संस्करण के लिए, ओकेएलएल में किए गए आरईपीएल को कम देखें , "हैंडबुक ऑफ प्रैक्टिकल लॉजिक एंड ऑटोमेटेड रीजनिंग" के लिए कोड और संसाधन देखें - prolog.ml

पुस्तक कोड का F # में अनुवाद यहां पाया जा सकता है । हास्केल को पुस्तक कोड का अनुवाद यहां मिल सकता है

कोड खोजने के संदर्भ में, एकीकरण एल्गोरिथ्म को ढूंढना सबसे आसान है, फिर अनुप्रयोगों में imbedded पीछे के साथ कार्यान्वयन। एक REPL के साथ कार्यात्मक भाषा में प्रोलॉग का पूरी तरह कार्यात्मक कार्यान्वयन खोजना सबसे कठिन है। अधिकांश समय कोड PROLOG के भीतर प्रत्यक्ष उपयोग के लिए एक प्रारूप में नहीं है; यह प्रदर्शन बढ़ाने के लिए भारी रूप से अनुकूलित है, इसलिए आपको कोड मिल सकता है, लेकिन यह आपके द्वारा इच्छित भागों को छेड़ने के लिए मूल्य के लायक नहीं होगा। मेरी सलाह यह होगी कि आप लुगर की किताब को पढ़ें और अपनी पसंद की भाषा में खरोंच से इसका निर्माण करें, भले ही इसका मतलब एलआईएसपी को स्थापित करना और सीखना और ऐसा करने के लिए अनुवाद करना हो।

संपादित करें

चूंकि यह StackOverflow का एक डुप्लिकेट प्रश्न है और ओपी नया है और टिप्पणियों में कहा गया है:

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

मैं यहाँ इस पर विस्तार करूँगा, लेकिन महसूस करूँगा कि ओपी को एक नया प्रश्न पूछना चाहिए।

कुछ परिचय सामानों के लिए, प्रकार के निष्कर्ष को लागू करना देखें ।

इस पर मुझे जो सबसे अच्छी किताब पता है वह है बेंजामिन सी। पियर्स द्वारा टाइप और प्रोग्रामिंग लैंग्वेज । पुस्तक की साइट यहाँ है । OCaml कोड के लिंक के साथ संसाधन यहाँ है । और हाल ही में शुरू हुआ, लेकिन इसका पूरा अनुवाद F # में है

आश्रित प्रकार: पीजी। 462 शोधन प्रकार: स्नातकोत्तर। 207 रैखिक तर्क और प्रकार प्रणाली: स्नातकोत्तर। 109


1
गाय कोडर, आप सर एक सज्जन और विद्वान हैं! आपकी सहायता सबसे उपयोगी है, और इस प्रश्न का उत्तर देने के लिए वास्तव में समय निकालने के लिए मैं आपको पर्याप्त धन्यवाद नहीं दे सकता। = डी - जिम्स्टर के सहयोगी और अनुसंधान-थके हुए मित्र
शेनज़ो

मैं आपको फिर से धन्यवाद देता हूं, मैंने पहले ही इन पुस्तकों को प्राप्त कर लिया है (जो कि पहले है, किताब की दुकान की तीव्र यात्रा में नहीं)।
जिमस्टर

@Jimster नॉरविग का कोड अच्छा और स्पष्ट है, एक पृष्ठ IIRC में फिट बैठता है। हालांकि यह शुद्ध है याद नहीं है ।
विल नेस



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.