कटौती बहुत व्याख्या करने के लिए प्रचालन सीधी-सपाट, procedurally है, या अगर आप पसंद करते हैं। हालांकि, चूंकि तर्क प्रोग्रामिंग और प्रोलॉग के विषयों पर अधिकांश साहित्य घोषणात्मक प्रोलॉग प्रोग्राम (अच्छे कारणों से) के अर्थ में कटौती की व्याख्या करने में कठिनाइयों का अर्थ है। इसे सुधारने का एक प्रयास उनके प्रभावों के आधार पर "रंग" कटौती से है।
यहां सबकुछ कम स्पष्ट करने का मेरा प्रयास है।
कटौती के परिचालन अर्थ,
SWI-Prolog's reference manual से:। "विधेय जिसमें कटौती प्रकट होता है दूसरे शब्दों में प्रवेश करने के बाद बनाई गई सभी विकल्प अंक त्यागें, खंड, जिसमें कटौती प्रकट होता है के लिए प्रतिबद्ध और वर्तमान बिंदु में कट के बाईं ओर लक्ष्यों द्वारा बनाए गए चुनाव बिंदुओं को त्यागें। "
"The Art of Prolog" by Sterling and Shapiro से:। "लक्ष्य सफल होता है और सभी बनाया के बाद से माता-पिता लक्ष्य खंड कटौती [जोर मेरा नहीं] में होता है के सिर के साथ एकीकृत किया गया था विकल्पों को Prolog करता है हालांकि इस परिभाषा पूरा हो गया है और सटीक, इसकी विधियां और प्रभाव हमेशा सहज या स्पष्ट नहीं होते हैं। "
"The Craft of Prolog" by O'Keefe से:। "[कटौती] चुनाव अंक के ढेर वापस जहां यह जब विधेय जो lexically कटौती शामिल है बुलाया गया था था prunes यह कह का एक और तरीका है कि कटौती सफल होता है और करने के लिए Prolog करता है सभी चुनाव किए के बाद माता-पिता लक्ष्य [फिर से, जोर मेरा नहीं] कहा जाता था "
मैं सुझाव है कि आप ऊपर उद्धृत दो पुस्तकों से कम से कम कटौती पर वर्गों और इसके उपयोग पढ़ें। यह निश्चित रूप से आपको यह समझने में मदद करेगा कि वास्तव में क्या चल रहा है।
एक आम चर्चा समाधान बनाम उत्तर बनाम सबूत खोजने के बीच अंतर पर है। हम (उपयोगकर्ता, प्रोग्रामर) आमतौर पर उत्तर चाहते हैं। Prolog भविष्यवाणी का मूल्यांकन करने के परिणाम समाधान हैं। हालांकि, वास्तव में प्रोलॉग क्या देख रहा है सबूत है।
अपना उदाहरण लेने के लिए। आपके पास डेटाबेस p(1). p(2). p(3).
है। अब आप Prolog पूछना चाहता हूँ, "वहाँ है एक
?- p(X), X =:= 3.
X = 3.
आप एक ही समाधान, X = 3
मिल तुम भी अपने प्रश्न का जवाब मिल p(X)
ऐसे X =:= 3
कि,:। इस तरह हाँ, वहाँ है एक p(X)
, और एक्स 3 है, और स्पष्ट रूप से कोई और अधिक जवाब नहीं है।
(क्वेरी ?- p(X), X =:= 2.
की कोशिश करें। यह मूल प्रश्न के हूबहू व्यवहार करते है?)
प्रमाण पेड़ क्वेरी अनुरेखण द्वारा (एक फैशन में) देखा जा सकता है:
?- trace(p/1), trace(=:=).
% p/1: [call,redo,exit,fail]
% (=:=)/2: [call,redo,exit,fail]
true.
[debug] ?- p(X), X =:= 3.
T Call: (7) p(_G1004)
T Exit: (7) p(1)
T Call: (7) 1=:=3
T Fail: (7) 1=:=3
T Redo: (7) p(_G1004)
T Exit: (7) p(2)
T Call: (7) 2=:=3
T Fail: (7) 2=:=3
T Redo: (7) p(_G1004)
T Exit: (7) p(3)
T Call: (7) 3=:=3
T Exit: (7) 3=:=3
X = 3.
असल में, p/1
की खंड के प्रत्येक बारी में करने की कोशिश की है। पहले दो एक सबूत नहीं देते हैं, क्योंकि संयोजन के दूसरे उपन्यास विफल रहता है। प्रत्येक बार अंतिम विकल्प बिंदु (p/1
का अगला खंड) से सबूत की खोज जारी है। आखिरी व्यक्ति साबित हो सकता है, और आपको एक समाधान और आपकी क्वेरी का उत्तर मिल जाता है।
अब आप p/1
: p(1). p(2) :- !. p(3).
के दूसरे खंड के शरीर में कटौती करें। आप Prolog (उपरोक्त से परिभाषा 3 के संदर्भ में) बताते हैं, "जब एक सबूत की खोज p/1
के दूसरे खंड तक पहुंच जाती है, जो कि 2 के साथ अपने तर्क को एकजुट करता है, तो p/1
पर जब यह था, तो पसंद बिंदुओं के ढेर को छीन लेता था बुलाया।" जब p/1
कहा जाता था, तो कोई विकल्प नहीं था। इसलिए, जब X =:= 3
विफल हो जाता है, तो सबूत की खोज पूरी हो जाती है, संयोजन सिद्ध नहीं किया जा सकता है, कोई समाधान नहीं है, और आपको कोई जवाब नहीं मिलता है।
..... (क्वेरी ?- p(X), X =:= 2.
की कोशिश करें। यह एक ही क्वेरी के समान है जब आप कटौती नहीं था?)
रंग को
अब संयोजन के रूप p(X), X =:= 3.
के संदर्भ में, इस एक समाधान दूर कटौती, और एक सबूत कटौती। आपको अपेक्षित उत्तर नहीं मिला। यह कट लाल है।
यह अच्छा होगा अगर हम प्रोलॉग को बता सकें कि हमारा मतलब है कि कट या तो हरा या लाल (या हरा या ग्रे या लाल या नीला) होना चाहिए, लेकिन प्रोलॉग हमें ऐसा करने की अनुमति नहीं देता है। "रंग" कार्यक्रम के उद्देश्य (प्रोग्रामर के इरादे) और कट के परिचालन (प्रक्रियात्मक) प्रभाव का एक परिणाम है।
लेकिन वास्तव में, एक पुस्तक प्राप्त करने और कटौती पर अनुभाग पढ़ने का प्रयास करें। या यहां तक कि दो किताबें।
यह एक हरा कट नहीं है। आपने इसे हरा कट कहाँ पढ़ा? –
आपने * हरे * और * लाल * कट की परिभाषा को कहाँ पढ़ा? व्याख्यान पत्रों से – lurker
दोनों: - \। आप सुनिश्चित हैं कि यह हरा कट नहीं है? और यदि यह परिभाषा नहीं है तो क्या है? धन्यवाद। – rooster