यह Why am I getting "Non-exhaustive patterns in function..." when I invoke my Haskell substring function?हास्केल में, गैर-संपूर्ण पैटर्न संकलन-समय त्रुटियों क्यों नहीं हैं?
की एक अनुवर्ती मैं समझता हूँ कि -Wall
का उपयोग कर, GHC गैर संपूर्ण पैटर्न के खिलाफ चेतावनी दे सकता है। मैं सोच रहा हूँ क्या यह डिफ़ॉल्ट रूप से एक संकलन समय त्रुटि यह देखते हुए कि यह स्पष्ट रूप से एक आंशिक समारोह को परिभाषित करने के हमेशा संभव है नहीं कर पीछे कारण बताया गया है:
f :: [a] -> [b] -> Int
f [] _ = error "undefined for empty array"
f _ [] = error "undefined for empty array"
f (_:xs) (_:ys) = length xs + length ys
सवाल GHC-विशिष्ट नहीं है।
यह क्योंकि ...
- कोई भी विश्लेषण इस तरह का प्रदर्शन करने के लिए एक हास्केल संकलक लागू करने के लिए करना चाहता था है?
- एक गैर-संपूर्ण पैटर्न खोज कुछ ढूंढ सकता है लेकिन सभी मामलों में नहीं?
- आंशिक रूप से परिभाषित कार्यों को वैध माना जाता है और अक्सर दिखाया गया है कि ऊपर दिखाए गए निर्माण को लागू नहीं किया जाए? यदि यह मामला है, तो क्या आप मुझे समझा सकते हैं कि गैर-संपूर्ण पैटर्न सहायक/वैध क्यों हैं?
एक और मामला आम मामला एक गार्ड/केस/शाखा के अंदर लैम्ब्डा स्टेटमेंट होगा। आप जानते हैं कि तर्क का एक निश्चित रूप है क्योंकि आप किस शाखा में हैं, इसलिए लैम्बडा में इसे शामिल करना अनावश्यक है। –
मुझे नहीं लगता कि इसे अन्यथा लिखा जाना चाहिए। यह एक महान mod2 परिभाषा है भले ही संकलक सोचता है कि यह गैर-संपूर्ण है। मैं इस सवाल पर पहुंचा क्योंकि मुझे यह त्रुटि एक फाइब फ़ंक्शन लिखने में मिली है जिसे नकारात्मक पूर्णांक के लिए परिभाषित नहीं किया जाना चाहिए। –
शायद यह दायरे से बाहर है, लेकिन यह तय कर रहा है कि पैटर्न मिलान पूर्ण है या रोक समस्या से संबंधित नहीं है? सहजता से यह ऐसी भाषा की तरह लगता है जो इतनी सख्ती से टाइप की गई है क्योंकि हैस्केल को इस प्रकार के विश्लेषण को कम से कम भाषा के सबसेट के लिए सक्षम करना चाहिए, लेकिन मुझे पता है कि आंत सहजता यह अनुमान लगाने का एक भयानक तरीका है कि कुछ कंप्यूटेबल है या नहीं। – kai