2014-04-09 7 views
9

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

धन्यवाद।

+3

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

+4

कट्स किसी अन्य चीज़ की तरह एक उपकरण हैं जिन्हें नौकरी के लिए उचित रूप से चुना जाना चाहिए। आपका प्रशिक्षक उनके खिलाफ सिफारिश कर रहा है क्योंकि नौसिखिया प्रोग्रामर अक्सर समाधान में अतिरिक्त प्रयास नहीं दिखाकर अपने आउटपुट "neater" को एक त्वरित तरीके के रूप में उपयोग करते हैं, जब वास्तव में परिदृश्य होते हैं कि वे वास्तव में उन्हें देखना चाहते हैं। अनजाने में, उन्होंने समाधान को काट दिया है कि वे एक अलग मामले में चाह सकते हैं। इसलिए उन्हें आउटपुट को "साफ" करने के तरीके के रूप में उपयोग नहीं किया जाना चाहिए, लेकिन तर्क में एक विकल्प बिंदु को खत्म करने के लिए एक सावधानी से विचार किया गया तरीका है। – lurker

+4

यदि आप कुछ विशिष्ट समस्याओं में भाग लेते हैं जहां आपको लगता है कि आपको कट का उपयोग करना चाहिए, तो उन्हें StackOverflow.com पर प्रश्नों के रूप में पोस्ट करने के लिए स्वतंत्र महसूस करें। सवाल पूछते हुए, "मैं बिना किसी कटौती के इस कोड कैसे कर सकता हूं?" पूछने के लिए एक अच्छा प्रोलॉग सवाल है। :) – lurker

उत्तर

9

मैं @dasblinkenlight और @mbratch से सहमत हूं। इसके अतिरिक्त, मुझे लगता है कि हरी कटौती और लाल कटौती के मामले में सोचना उपयोगी होता है।

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

एक लाल कट कार्यक्रम के व्यवहार को प्रभावित करता है। चूंकि @ एमब्रैच ने कहा, नए उपयोगकर्ता अक्सर उत्पादन को "साफ-सुथरा" करने के लिए कटौती करते हैं। नए उपयोगकर्ता अक्सर प्रोग्राम प्रोग्राम क्वेरी को उनके प्रोग्राम के लिए यूजर इंटरफेस के रूप में देखते हैं। ये कटौती आउटपुट नाइसर बनाने की प्रक्रिया में कम सामान्य और कम उपयोगी बनाती हैं। कुछ विकल्प भी स्पष्ट हैं, जैसे once/1 जो आपको एक परिणाम देता है। विशेषज्ञ लाल कटौती का बहुत ही कमजोर उपयोग करते हैं- ऐसी परिस्थितियां हैं जहां यह तार्किक दृष्टिकोण से कहीं अधिक कुशल है-लेकिन यदि आपके पास पूरी तरह तार्किक फॉर्मूलेशन तक पहुंच है तो यह बेहतर है। अक्सर कट के उपयोग में त्रुटियों के साथ भविष्यवाणी की जाती है "पिछली शुद्धता" के साथ समस्याएं होती हैं जो बाद में उत्पन्न होती हैं जब आप अन्य भविष्यवाणियों के हिस्से के रूप में भविष्यवाणी के आधार पर होते हैं। डीबग करना और ठीक करना मुश्किल हो सकता है।

मुझे यकीन नहीं है कि मैं उन्हें "पाप" कहूंगा लेकिन मैं ज्यादातर शुरुआती लोगों के लिए आपके प्रोफेसर से सहमत हूं। यदि आप कट का उपयोग किए बिना तर्कसंगत समस्याओं को हल करने में अनुभव करते हैं तो यह सबसे अच्छा है। तब कटौती बाद में पेश की जा सकती है जब आपके पास आसान और क्या मुश्किल है की बेहतर समझ है। इसे बहुत जल्दी उपयोग करने से आप प्रक्रियात्मक प्रोग्रामिंग के लिए एक क्रैच के रूप में इस पर निर्भर करते हैं।

+0

आह मैं देखता हूं, मुझे यह महसूस करना होगा कि कटौती का उपयोग करके मैं एक छोटा सा कट ले रहा था और वास्तव में यह नहीं समझ रहा था कि मेरे उत्तरों कैसे उत्पन्न किए गए थे। धन्यवाद! – Achaldo

+1

अच्छा! यह ज्ञान के लिए प्रोलॉग रोड पर एक महत्वपूर्ण अहसास है। :) –

8

शुरुआत में, प्रोलॉग के शुद्ध घोषणात्मक भाग पर एक साधारण कारण के लिए ध्यान केंद्रित करने का प्रयास करें: यह वह हिस्सा है जो प्रोलॉग को अन्य प्रोग्रामिंग भाषाओं से अलग करता है। भाषा के शुद्ध, एकात्मक भाग पर ध्यान केंद्रित करें और पूरी तरह से कटौती से बचें। आप इस प्रोग्रामिंग प्रतिमान में विसर्जित करने की अपेक्षा कैसे कर सकते हैं?

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

इसके बजाय, प्रोल केवल तभी नियमों को जानता है। तो अनिवार्य रूप से आपके पास एक भाग के लिए एक नियम होगा और दूसरे भाग के लिए दूसरा होगा। यह शुरुआत में आपको काफी असामान्य लगेगा, लेकिन यह आपको बहुत शुद्ध कोड का अनुभव करने की अनुमति देता है।

शुद्ध कोड के उदाहरणों के लिए my page देखें।

यह भी देखें: Features of good Prolog code? मजेदार है कि रोचक प्रश्न हमेशा SO पर बंद हो जाते हैं।

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

मेरा उत्तर में थोड़ा और अधिक संतुलित बनाए रखने हेतु, कटौती के साथ दक्षता में सुधार के लिए एक साफ रास्ता का एक उदाहरण है:

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