2015-12-27 11 views
5

मैनुअल पढ़ने से, मुझे दोनों के बीच का अंतर नहीं दिख रहा है।समाप्त/1 और retractall/1 के बीच क्या अंतर है?

मैनुअल का कहना है:

यह retractall/1 एक गतिशील विधेय के सभी खंड को मिटाकर के लिए उपयोग करने के लिए सलाह दी जाती है।

इसलिए मैंने अपने कार्यक्रम में retractall/1 का उपयोग करना चुना; हालांकि, मुझे आश्चर्य है कि अंतर क्या है।

उत्तर

6

retractall/1 मानक अंतर्निहित भविष्य का उपयोग गतिशील भविष्यवाणी के लिए सभी खंडों को हटाने के लिए किया जा सकता है लेकिन भविष्यवाणी अभी भी रनटाइम द्वारा जानी जाएगी। abolish/1 मानक अंतर्निर्मित भविष्यवाणी, दूसरी तरफ, न केवल सभी अनुमानित खंडों को हटाती है बल्कि रनटाइम को अज्ञात भविष्यवाणी भी बनाती है। यदि आप retractall/1 का उपयोग करके अपने सभी खंडों को हटाने के बाद गतिशील भविष्यवाणी करने का प्रयास करते हैं, तो कॉल बस विफल हो जाती है। लेकिन यदि आप एक गतिशील भविष्यवाणी को समाप्त करते हैं, तो इसे कॉल करने के परिणामस्वरूप एक वास्तविक अस्तित्व त्रुटि होगी।

+0

रों (एक्स) अदा कर सकता है: संक्षिप्त! – repeat

2

इससे पहले कि मैं आपका प्रश्न और @PauloMoura's fine answer पढ़ूं, मुझे जवाब भी नहीं पता था।

इस उत्तर के साथ मैं पाउलो के जवाब की प्रतिलिपि बनाना नहीं चाहता हूं। इसके बजाय, मैं सुझाव है कि आप पढ़ने पर विचार/वैकल्पिक Prolog से संबंधित सूत्रों खोज:

ध्यान दें कि ऊपर may or may not सीधे the Prolog system you use फिट भाग।

फिर भी, एकाधिक स्रोत होने से एक अच्छी बात है: यह आपको अटकने से रोक सकता है!

सादृश्य में
4

एसक्यूएल करने के लिए:

retractall(table_name(_,_,_)), delete from table_name हो सकता है, जबकि abolish(table_name/3) रूप drop table_name

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