2009-11-21 8 views
7

मैंने इसे एक पुस्तक में पढ़ा है लेकिन इसे बिल्कुल समझाया नहीं गया था। मैंने इसे कभी भी एक कार्यक्रम में नहीं देखा। Prolog वाक्यविन्यास का हिस्सा है? वह किसके लिए है? क्या तुम इसका इस्तेमाल करते हो?प्रोलॉग में ऑपरेटर क्या है और मैं इसका उपयोग कैसे कर सकता हूं?

धन्यवाद

+0

मैंने पढ़ा कि इसे पार्सर्स लिखने के लिए इस्तेमाल किया जा सकता है। एसयूएम -> ओ 1 + ओ 2 या कुछ ... –

+2

यह है -> (दो अक्षर देखें), एसडब्ल्यूआई मैनुअल देखें: http://www.swi-prolog.org/pldoc/doc_for?object=section%282 % 2 सी% 20% 274.12% 27% 2 सी% 20swi% 28% 27% 2fdoc% 2fManual% 2fDCG.html% 27% 2 9% 2 9 – starblue

उत्तर

7

यह निहितार्थ प्रतिनिधित्व करता है। राउंडथैंड पक्ष केवल तभी निष्पादित किया जाता है जब लेफ्टथैंड पक्ष सच है। इस प्रकार, यदि आप इस कोड है,

implication(X) :- 
    (X = a -> 
    write('Argument a received.'), nl 
    ; X = b -> 
    write('Argument b received.'), nl 
    ; 
    write('Received unknown argument.'), nl 
). 

तो यह उस पर निर्भर करता है तर्क अलग बातें लिखेंगे: (। link to documentation)

?- implication(a). 
Argument a received. 
true. 

?- implication(b). 
Argument b received. 
true. 

?- implication(c). 
Received unknown argument. 
true. 

+0

प्रतीक्षा करें, अगर यह निहितार्थ है, तो तार्किक 'झूठी -> झूठी' को सच होना चाहिए ', जब यह वास्तव में नहीं करता है। उसका क्या तात्पर्य? –

2

यह कटौती की एक स्थानीय संस्करण है, को देखने के उदाहरण के लिए एसडब्ल्यूआई मैनुअल में section on control predicated

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

+0

सॉफ्ट कटौती एसडब्ल्यूआई में "* ->" के माध्यम से उपलब्ध नहीं है, न कि "->"! – mat

0

कुछ और शब्द लिखकर इसका उपयोग करना संभव है।

implication(X) :- 
    (
    X = a, 
    write('Argument a received.'), nl 
    ; 
    X = b, 
    write('Argument b received.'), nl 
    ; 
    X \= a, 
    X \= b, 
    write('Received unknown argument.'), nl 
). 

(। हाँ मुझे नहीं लगता कि इसका उपयोग के साथ किसी भी समस्या है, लेकिन मेरे मालिक किसी कारण से इसके बारे में पागल था, इसलिए हम हमेशा ऊपर दृष्टिकोण का इस्तेमाल किया)

: मैं Stephan's विधेय पुनर्लेखन हैं

किसी भी संस्करण के साथ, आपको सावधान रहना होगा कि आप उन सभी मामलों को कवर कर रहे हैं जिन्हें आप कवर करना चाहते हैं, खासकर यदि आपके पास कई शाखाएं हैं।

ईटीए: मुझे यकीन नहीं है कि यह स्टीफन के बराबर है, अगर आपके पास implication(X) है तो बैकट्रैकिंग के कारण। लेकिन मेरे पास अभी जांच करने के लिए प्रोलॉग दुभाषिया नहीं है।

+0

हम्म। मैं प्रोलॉग में इतना नहीं हूं, लेकिन ऐसा लगता है कि यह DRY सिद्धांत का उल्लंघन करता है। यकीन नहीं है कि यह इसके लायक है! मेरा मतलब है, खासकर यदि पूर्व शर्त थोड़ा अधिक जटिल हो जाती है, तो यह गन्दा हो सकती है। बैकट्रैकिंग के लिए: इस संस्करण के लिए (एसडब्ल्यूआई) प्रोलॉग तुरंत 'निहितार्थ (ए)' और 'निहितार्थ (बी)' पर संकेत पर वापस नहीं आता है, इसलिए वास्तव में कुछ बैकट्रैकिंग का प्रयास किया जाएगा। – Stephan202

+0

हाँ मैं निश्चित रूप से यह नहीं कह रहा हूं कि यह एक बेहतर विकल्प है, बस यह एक विकल्प है। :) – pfctdayelise

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

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