नहीं है, वहाँ नहीं है, के बाद से यदि संकलक इस संकल्प कर सकता है, कि सुलझाने के बराबर होगा समस्या निवारण आम तौर पर, तथ्य यह है कि दो कार्य एक दूसरे को "लूप" पैटर्न में कॉल करते हैं, यह निष्कर्ष निकालने के लिए पर्याप्त नहीं है कि वास्तव में कार्यों में से किसी एक को कॉल करने के परिणामस्वरूप लूप होगा।
एक (काल्पनिक) उदाहरण का उपयोग करने के लिए,
collatzOdd :: Int -> Int
collatzOdd 1 = 1
collatzOdd n = let n' = 3*n+1 in if n' `mod` 2 == 0 then collatzEven n'
else collatzOdd n'
collatzEven :: Int -> Int
collatzEven n = let n' = n `div` 2 in if n' `mod` 2 == 0 then collatzEven n'
else collatzOdd n'
collatz :: Int -> Int
collatz n = if n `mod` 2 == 0 then collatzEven n else collatzOdd n
(बेशक यह Collatz conjecture लागू करने के लिए नहीं सबसे प्राकृतिक तरीका है, लेकिन यह पारस्परिक रूप से पुनरावर्ती कार्यों को दिखाता है।)
अब collatzEven
और collatzOdd
एक दूसरे पर निर्भर करते हैं, लेकिन कोलात्ज़ अनुमान यह बताता है कि collatz
को कॉल करने से सभी सकारात्मक n
समाप्त हो जाता है। यदि जीएचसी निर्धारित कर सकता है कि collatzOdd
और collatzEven
की कक्षा में डिफ़ॉल्ट परिभाषाओं की पूरी परिभाषा थी या नहीं, तो जीएचसी को कोलात्ज़ अनुमान को हल करने में सक्षम होगा! (यह निश्चित रूप से हल करने की समस्या की अनावश्यकता का सबूत नहीं है, लेकिन यह स्पष्ट करना चाहिए कि यह निर्धारित करना क्यों कि एक पारस्परिक रूप से कार्य करने का सेट अच्छी तरह से परिभाषित किया गया है, जैसा कि यह प्रतीत होता है उतना छोटा नहीं है।)
इन सामान्य, चूंकि जीएचसी स्वचालित रूप से यह निर्धारित नहीं कर सकता है, इसलिए हास्केल कक्षाओं के लिए प्रलेखन कक्षा के उदाहरण बनाने के लिए आवश्यक "न्यूनतम पूर्ण परिभाषा" प्रदान करेगा।
स्रोत
2012-09-04 19:59:14
हां! रोकथाम की समस्या के मामले में, एग्डा जैसी कुल भाषाएं साबित करती हैं कि सामान्य रूप से असफल होने वाली समस्याएं बड़े और दिलचस्प हल करने योग्य सबसेट हो सकती हैं। –
"'सरल सादे अपरिहार्य' हाथ से एक कंपाइलर तकनीक को खारिज करने के लिए पर्याप्त मानदंड नहीं है। सामान्य मामलों में अनावश्यक समस्याएं जो कि अनिश्चित हैं, विशिष्ट मामलों में काफी डरावनी हैं।" http://c2.com/cgi/wiki?SfficientlySmartCompiler –
ट्रैक टिकट को बकवास कारण के लिए बंद कर दिया गया है: कोई व्यक्ति '''' या' negate' के बिना 'न्यू' उदाहरण परिभाषित कर सकता है लेकिन जहां '+' मूल्यांकन नहीं करता है इसका दूसरा तर्क है, इसलिए इसकी स्पष्ट रूप से परिपत्र परिभाषा ठीक समाप्त हो जाएगी। '-' या' negate' को परिभाषित किए बिना गैर-समाप्ति से बाहर निकलने का यह एकमात्र तरीका है। मुझे लगता है कि ये विचित्र उपयोग के मामले हैं, और यदि आप '_'' का उपयोग कर परिपत्र परिभाषाओं से बचना चाहते हैं तो 'नोर्नंडिफाइनसाइक्लिकमाइंड्स' निर्दिष्ट करना ठीक है। हालांकि मुझे पता नहीं है कि ट्रैक पर इसे कैसे बढ़ाया जाए। – AndrewC