Prolog

2016-07-03 6 views
5

में bagof, setof और findall के बीच चयन करने के लिए कैसे चुनें bagof, setof और findall के बीच कोई कैसे चुनता है? क्या कोई महत्वपूर्ण अंतर है? जो आमतौर पर उपयोग किया जाता है और सबसे सुरक्षित कौन सा है? आपकी टिप्पणियों/उत्तरों के लिए धन्यवाद।Prolog

मैंने SWI-Prolog manual page on findall/3 की जांच की और उन्हें बहुत समान पाया।

+2

आपके द्वारा दिया गया लिंक 'findall/3' बनाम' bagof/3' बताता है। 'setof/3' 'bagof/3' की तरह है, सिवाय इसके कि यह अनावश्यक समाधान हटा देता है (परिणाम सूची में तत्व अद्वितीय हैं) और यह परिणाम आरोही क्रम में टाइप करता है। – lurker

+0

संक्षिप्त उत्तर: निर्भर करता है कि आप क्या हासिल करना चाहते हैं। यदि आप ठोस उपयोग के मामले का वर्णन करते हैं और अपने उपयोग मामले के संदर्भ में तीन ('bagof/3',' setof/3', और 'findall/3') की तुलना करते हैं तो आपको अधिक _useful_ उत्तर मिल सकते हैं। –

उत्तर

4

यह एक अच्छा सवाल है!

मैं एक संपूर्ण जवाब देने के लिए प्रयास नहीं कर रहा हूँ, लेकिन मैं सोचा की कुछ लाइनें मदद कर सकते हैं कि आप इन विधेय बेहतर समझने के लिए सुझाव देना चाहते हैं:

  • सोचो इन विधेय के जो के बारे में अधिक हैं के अर्थ में मौलिक के संदर्भ में क्या व्यक्त किया जा सकता है। उदाहरण के लिए, क्या आप setof/3 के संदर्भ में findall/3 व्यक्त कर सकते हैं? और दूसरी तरफ के बारे में क्या? यह इन सभी भविष्यवाणियों को लागू करने के लिए आपको कम से कम प्रदान करने की आवश्यकता है, यह देखने में सहायता करता है।
  • इस बारे में सोचें कि घोषणात्मक गुण इन भविष्यवाणियों द्वारा संरक्षित हैं। उदाहरण के लिए, क्या ऑर्डर जिसमें समाधान पाए जाते हैं, परिणाम को प्रभावित करते हैं? इनमें से कौन सा भविष्यवाणी करता है? क्या इनमें से कोई भविष्यवाणी विफल हो सकता है? किस मामले में ठीक है?
  • इन भविष्यवाणियों में से अंतरिक्ष और समय जटिलता के बारे में सोचें। इनमें से कौन सा भविष्यवाणी, यदि कोई है, को लागू किया जा सकता है और दूसरों की तुलना में अधिक कुशलता से उपयोग किया जा सकता है? और किस कीमत और व्यापार पर?

इसके अलावा, मैं सुझाव है कि आप पढ़ा रिचर्ड ओ'कीफी का पुस्तक इन विधेय बारे में महत्वपूर्ण जानकारी के लिए Prolog की क्राफ्ट।

1

findall/3 और bagof/3 के बीच मुझे एक महत्वपूर्ण अंतर मिला, यह बाद में सूची में जमा होने वाली शर्तों की प्रतिलिपि नहीं करता है। यह मौलिक हो सकता है, उदाहरण के लिए, जब आपकी सूची जिम्मेदार चर एकत्र करेगी, जैसे लाइब्रेरी (clpfd) के साथ किसी समस्या का मॉडल करते समय आप उपयोग करते हैं।