2013-04-19 10 views
7

क्या कोई जावा पोलॉग कार्यान्वयन है जो लैम्ब्डा अभिव्यक्तियों का समर्थन करता है? मुझे पता है कि अन्य भाषाओं के जावा कार्यान्वयन हैं जो लैम्ब्डा अभिव्यक्तियों का समर्थन करते हैं, जैसे कि LISP और क्लोजर, लेकिन मुझे वास्तव में एक पोलॉग कार्यान्वयन की आवश्यकता है।लैंबडा अभिव्यक्तियों के साथ पोलॉग

http://en.wikipedia.org/wiki/Comparison_of_Prolog_implementations

उत्तर

4

झुक Prolog जावा में कार्यान्वित किया जाता है और Logtalk चला सकते हैं, जो लैम्ब्डा भाव सब supported backend Prolog compilers करने के लिए उपलब्ध बनाता है। Logtalk के लैम्ब्डा भाव वाक्य रचना के अवलोकन के लिए उदाहरण के लिए देखें:

http://blog.logtalk.org/2009/12/lambda-expressions-in-logtalk/

उपयोग के उदाहरण के लिए देखें:

https://github.com/LogtalkDotOrg/logtalk3/tree/master/examples/lambdas

4

उलरिच Neumerkel द्वारा एक Prolog लैम्ब्डा कार्यान्वयन नहीं है। उदाहरण के लिए एसडब्ल्यूआई-प्रोलॉग इसका समर्थन करता है। यदि आपने स्टैकओवरफ्लो में खोज की है:

[swi-prolog] lambda 

आप समाधानों के लिए इसका उपयोग करके कुछ जवाब भी पा सकते हैं।

इसके अलावा, वेब पेज है कि explains it all

+1

उलरिच के लैम्ब्डा पुस्तकालय एक Prolog कार्यान्वयन नहीं बल्कि एक * आईएसओ * Prolog कार्यान्वयन है (उदाहरण के लिए यह एक गैर आईएसओ मानक predicate strip_module/3 और एक गैर आईएसओ मानक निर्देश मेटा_प्र्रेडिकेट/1 का उपयोग करता है)। इसे एक मॉड्यूल सिस्टम का समर्थन करने वाले प्रोलॉग कंपाइलर की भी आवश्यकता होती है जो मॉड्यूल के लिए आईएसओ प्रोलॉग मानक के अनुरूप नहीं है। –

+0

@PauloMoura सुधार के लिए धन्यवाद! –

+1

@ पाउलोमोरा: कृपया [इस कार्यान्वयन] को पढ़ें (http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/ISO-Hiord#implementation)! न तो इसमें स्ट्रिप_ मॉड्यूल/3 और न ही meta_predicate और न ही कोई मॉड्यूल संदर्भ होता है। आपके द्वारा उल्लेख किए गए एसडब्ल्यूआई के लिए कार्यान्वयन में आपके द्वारा उल्लेख किए गए एसडब्ल्यूआई की कई कार्यान्वयन-विशिष्ट विशेषताओं को ध्यान में रखा गया है। लेकिन आप और भी चूक गए हैं। – false

2

वहाँ मूलतः Prolog में लैम्ब्डा भाव के लिए दो दृष्टिकोण आसपास हैं, जो केवल पता लैम्ब्डा अभिव्यक्तियों का आविष्कार और उच्च आदेश एकीकरण:

  • वैश्विक-दर-डिफ़ॉल्ट: लैम्ब्डा अभिव्यक्ति के शरीर में चर अगर वे एक अतिरिक्त बांधने की मशीन द्वारा वर्णित नहीं हैं, डिफ़ॉल्ट रूप से वैश्विक हैं।

  • स्थानीय-दर-डिफ़ॉल्ट: यदि वे एक अतिरिक्त बांधने की मशीन द्वारा उल्लेख नहीं कर रहे हैं लैम्ब्डा अभिव्यक्ति के शरीर में चर, डिफ़ॉल्ट रूप से स्थानीय कर रहे हैं। स्थानीय-दर-चूक के

प्रतिनिधियों उदाहरण उलरिच Neumerkel के पुस्तकालय (लैम्ब्डा) या लैम्ब्डा भाव Logtalk में पाया के लिए कर रहे हैं। वैश्विक-दर-डिफ़ॉल्ट दृष्टिकोण वर्तमान में लैम्ब्डा जेकेजेक प्रोलॉग में पाए गए अभिव्यक्तियों के बाद है।

दोनों दृष्टिकोण एक ही गणितीय लैम्ब्डा भाव मॉडल और निम्न समस्याओं को हल करने की अनुमति:

  • साझा करने या कई आमंत्रण भर में चर के गैर बंटवारे का नियंत्रण।

  • लैम्बर्स अभिव्यक्ति के शरीर में बाइंडर्स और स्थानीय चर के लिए अल्फा रूपांतरण की मजबूती ।

यहाँ एक उदाहरण है, Y Combinator के माध्यम से भाज्य:

  • वैश्विक-दर-डिफ़ॉल्ट: Jekejeke Prolog APISource
 
    ?- Y = F\X^call(X\call(F,call(X,X)),X\call(F,call(X,X))), 
     Fact = F\J^H^M^N^N\J^H^M^M\J^H^(N=0,M=1;N>0,H is N-1,call(F,H,J),M is N*J), 
     call(Y,Fact,10,R). 
    R = 3628800. 
 
    ?- Y = \F^call([F]+\X^call(F,call(X,X)),[F]+\X^call(F,call(X,X))), 
     Fact = \F^([F]+\N^([N,F]+\M^(N=0,M=1;N>0,H is N-1,call(F,H,J),M is N*J))), 
     call(Y,Fact,10,R). 
    R = 3628800. 

अलविदा

पुनश्च:
भाषा सुविधाओं और वास्तुकला बी Prolog
Neng-एफए: भेद वैश्विक-दर-डिफ़ॉल्ट और स्थानीय-दर-डिफ़ॉल्ट से, पेज 10 उधार लिया जाता है झोउ, सिद्धांत और तर्क प्रोग्रामिंग की प्रैक्टिस, 2011
http://www.sci.brooklyn.cuny.edu/~zhou/papers/tplp11sips.pdf

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