Prolog Language
त्रुटि से निपटने और अपवाद
खोज…
तात्कालिक त्रुटी
यदि कोई तर्क पर्याप्त रूप से त्वरित नहीं है, तो एक तात्कालिकता त्रुटि को फेंक दिया जाता है ।
गंभीर रूप से, एक तात्कालिक त्रुटि को मौन विफलता द्वारा प्रतिस्थापित नहीं किया जा सकता है: ऐसे मामलों में असफल होने का मतलब होगा कि कोई समाधान नहीं है , जबकि तात्कालिक त्रुटि का अर्थ है कि तर्क का एक उदाहरण समाधान में भाग ले सकता है।
यह उदाहरण के लिए — डोमेन त्रुटि के विपरीत है, जिसे किसी कार्यक्रम के घोषित अर्थ को बदले बिना मौन विफलता द्वारा प्रतिस्थापित किया जा सकता है।
त्रुटि से निपटने के बारे में सामान्य बिंदु
Prolog सुविधाएँ अपवाद हैं , जो Prolog ISO मानक का हिस्सा हैं।
एक अपवाद को throw/1
साथ throw/1
दिया जा सकता है, और catch/3
साथ पकड़ा जा सकता है।
आईएसओ मानक कई मामलों को परिभाषित करता है जिसमें त्रुटियों को फेंकना चाहिए या हो सकता है। मानकीकृत अपवाद फॉर्म error(E,_)
, जहां E
त्रुटि को इंगित करता है। उदाहरण हैं instantiation_error
, domain_error
और type_error
है, जो देखते हैं।
अपवादों के संबंध में एक महत्वपूर्ण विधेय setup_call_cleanup/3
, जो देखते हैं।
अपवादों के बाद सफाई
वर्तमान setup_call_cleanup/3
, जो वर्तमान में Prolog ISO मानक में शामिल किए जाने के लिए माना जा रहा है और कार्यान्वयन की बढ़ती संख्या द्वारा प्रदान किया गया है, हमें यह सुनिश्चित करने देता है कि अपवाद फेंक दिए जाने के बाद संसाधनों को सही ढंग से मुक्त किया जाए।
एक विशिष्ट आह्वान है:
setup_call_cleanup(open(File, Mode, Stream), process_file(File), close(Stream))
ध्यान दें कि इस मामले में open/3
तुरंत बाद एक अपवाद या व्यवधान भी हो सकता है। इस कारण से, Setup
चरण को परमाणु रूप से निष्पादित किया जाता है। Prolog सिस्टम में जो केवल call_cleanup/2
प्रदान करते हैं, यह व्यक्त करना बहुत कठिन है।
प्रकार और डोमेन त्रुटियाँ
एक प्रकार की त्रुटि तब होती है जब एक तर्क अपेक्षित प्रकार का नहीं होता है। प्रकार के उदाहरण हैं:
-
integer
-
atom
-
list
।
यदि विधेय अपेक्षित प्रकार का है, लेकिन अपेक्षित डोमेन के बाहर है, तो एक डोमेन त्रुटि उठाई जाती है।
उदाहरण के लिए, एक डोमेन त्रुटि स्वीकार्य है यदि 0 और 15 के बीच पूर्णांक अपेक्षित है, लेकिन तर्क पूर्णांक 20 है।
घोषणात्मक रूप से, एक प्रकार या डोमेन त्रुटि मूक विफलता के बराबर है, क्योंकि कोई तात्कालिकता यह भविष्यवाणी नहीं कर सकती है कि किसका तर्क गलत प्रकार या डोमेन के सफल होने का है।