2010-10-11 6 views
15

पर प्रोलॉग कोड निष्पादित करना मुझे वर्तमान में एक एप्लिकेशन में प्रोलॉग कोड निष्पादित करने की आवश्यकता है। मुझे पता है कि ऐप्पल शायद ऐप स्टोर में ऐसा कुछ भी अनुमति नहीं देगा, लेकिन यह इरादा नहीं है। यह एक निजी परियोजना है जो कभी भी ऐप स्टोर तक नहीं पहुंच जाएगी।आईफोन

उद्देश्य

इस मामले prolog में एक वस्तु (जैसे उदाहरण के लिए एक टेलीफोन) और उसके गुणों का वर्णन किया जाता है। प्रोलॉग स्क्रिप्ट में निर्दिष्ट निर्देशांक का उपयोग करके ओपनजीएल के साथ ऑब्जेक्ट खींचा जाएगा। प्रोलॉग का उपयोग करने का कारण यह है कि मुझे इस ऑब्जेक्ट की कुछ विशेषताओं के बारे में प्रोग्राम से पूछने की क्षमता की आवश्यकता है, और प्रोलॉग इसे बहुत आसान बनाता है। निचली पंक्ति: मुझे अपने ऐप से प्रोलॉग स्क्रिप्ट पूछने के लिए "ज़रूरत है"।

संभावित समाधान

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

अफसोस की बात है, Google मुझे कोई परिणाम नहीं देता है, इसलिए मुझे लगता है कि मैं इस परियोजना पर काफी अकेला हो सकता हूं। अगर किसी के पास कोई अनुभव या सुराग है, तो मैं बहुत आभारी हूं।

+0

क्या आप रूबी में लिखे गए प्रोलॉग कार्यान्वयन कार्यों में से एक को लिंक साझा करना चाहते हैं? –

+0

मैंने उनमें से किसी को भी कोशिश नहीं की, लेकिन Google पर एक त्वरित खोज ने मुझे यह परिणाम दिया: http://eigenclass.org/hiki.rb?tiny+prolog+in+ruby – Bendik

+0

आह, हाँ, धन्यवाद। मैंने कुछ "छोटे प्रोलॉग" कार्यान्वयन को बहुत समय पहले इसी तरह देखा था, लेकिन मुझे नहीं लगता कि उनकी तुलना पूरी तरह से उड़ाए गए सिस्टम जैसे एसडब्ल्यूआई-प्रोलॉग, वाईएपी, एसआईसीस्टस प्रोलॉग और सी के साथ की जा सकती है। –

उत्तर

4

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

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

http://www.swi-prolog.org/packages/jpl/

यह भी पूरी तरह से फिर से प्रवेशी है, तो आप से prolog कोड का दृष्टांत कर सकते हैं:

+0

मुझे यह नहीं मिला, जावा तस्वीर क्यों दर्ज करता है? कोड की कुछ पंक्तियों के साथ आप एक एसडब्ल्यूआई-आधारित HTTP सर्वर भी देख सकते हैं (http://www.swi-prolog.org/pldoc/package/http.html देखें) – Kaarel

+0

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

+0

एफवाईआई, यदि आप जेपीएल: http://www.swi-prolog.org/packages/jpl/ का उपयोग करते हैं, तो आप जावा और एसडब्ल्यूआई-प्रोलॉग के बीच आसानी से द्वि-दिशात्मक रूप से कॉल कर सकते हैं। –

3

आप SWI-Prolog's स्रोत कोड डाउनलोड कर सकते हैं और इसे आईओएस मंच के लिए एक्ससीडीईई के साथ संकलित कर सकते हैं। मैंने कभी ऐसा नहीं किया है, लेकिन यह निश्चित रूप से तकनीकी रूप से संभव है।

एक बार ऐसा करने के बाद, सी/सी ++ से प्रोलॉग कोड को चलाने के तरीके पर बहुत सारे उदाहरण हैं, इसलिए, आप उद्देश्य-सी से प्रोलॉग चलाने में सक्षम होंगे।

+0

मैंने इसे एक ईमानदार प्रयास दिया, लेकिन दुख की बात है कि सी, सी ++ के बारे में मेरा ज्ञान और आईडीई के बिना संकलन सीमित है, यदि मौजूदा नहीं है। मैंने सॉकेट के साथ एक नेटवर्क समाधान को कार्यान्वित करना समाप्त कर दिया और एक सर्वर इसके बजाय ज्ञान आधार के रूप में कार्य कर रहा था। – Bendik

+0

बहुत बढ़िया बेंडिक। खुशी है कि आपने अपनी समस्या हल की है। –

6

प्रोलॉग कोड को कॉल करने जैसी ही कठिनाइयों का सामना करने के बावजूद, एक अलग परिस्थिति में, मैं कैस्टर सी ++ लाइब्रेरी की जांच करने की सिफारिश करता हूं। यह आपको भाषा को विस्तारित किए बिना मूल सी ++ में तर्क प्रतिमान कोड लिखने की अनुमति देता है। चूंकि कास्टर केवल हेडर लाइब्रेरी है, जहां भी C++ उपलब्ध है संकलित करना आसान है।
कास्टर वेबसाइट: http://www.mpprogramming.com/cpp/default.aspx

+0

हालांकि यह एक अच्छा समाधान की तरह लगता है, मेरे पर्यवेक्षक दुख से इसे स्वीकार नहीं करेंगे। हमारे पास पहले से ही प्रोलॉग में एक बड़ा ज्ञान आधार है, और पोर्टिंग में बहुत अधिक समय लगेगा। – Bendik

+0

@ बेंडिक पार्स करने के लिए प्रलोभन कितना मुश्किल है? यदि यह बहुत मुश्किल नहीं है तो आप प्रासंगिक कैस्टर सी ++ कोड को स्वचालित रूप से उत्पन्न करने के लिए कोड-जनरेशन दृष्टिकोण के साथ जा सकते हैं। – shuttle87

1

FYI करें, आप काफी आसानी से द्वि-दिशात्मक जावा और SWI-Prolog के बीच कॉल अगर आप JPL का उपयोग कर सकते हैं जावा, जो बदले में जावा कोड इत्यादि को तत्काल करता है ...

मैंने कुछ साल पहले कई व्यावसायिक परियोजनाओं के लिए ऐसा किया था जब मुझे प्रोल आधारित आधारित तर्क इंजन को बहुत सारे जावा कोड से कनेक्ट करने की आवश्यकता थी।

यह जेएनआई (जावा मूल इंटरफ़ेस) का उपयोग करता है, इसलिए आपको सावधान रहना होगा कि आप कैसे मूल एपीआई संकलित और लिंक करते हैं। यद्यपि यदि आप प्रत्येक प्लेटफ़ॉर्म के लिए उचित रूप से संकलित करते हैं तो आप इसे क्रॉस प्लेटफॉर्म पर काम कर सकते हैं। मैंने ओएस-एक्स, विंडोज़, लिनक्स & सोलारिस पर काम किया था।