2012-09-13 12 views
9

पैटर्न इस तरह:गणित पैटर्न कानूनी Haskell हैं?

front :: [a] -> a 
front (x:_) = x 
front _ = error "Empty list" 

हास्केल में आम होने लगते हैं, लेकिन मैं विशिष्ट निम्नलिखित सीखने याद है जब मैं सीख हास्केल शुरू कर दिया:

dec :: (Integral a) => a -> a 
dec (x+1) = x 
dec _ = error "Bottom" 

हालांकि, ghc कोड के उस टुकड़े को अस्वीकार करने के लिए प्रकट होता है करते हुए कहा:

Parse error in pattern: x + 1

जबकि hugs इसे ठीक से स्वीकार करता है। तो, क्या यह मान्य हैस्केल है या नहीं और ये कंपाइलर्स अलग-अलग व्यवहार क्यों करते हैं।

+0

नहीं, यह मान्य नहीं है। –

+0

@ ДМИТРИЙМАЛИКОВ: तो, क्यों 'गले लगाते हैं' इसे स्वीकार करते हैं? – bitmask

+2

@bitmask क्योंकि 2006 से गले में रिलीज नहीं हुआ है, और Haskell2010 मानक में 'NPlusKPatterns' को हटा दिया गया था। –

उत्तर

16

यह n+k पैटर्न के रूप में जाना जाता है। यह सामान्य रूप से disliked था और इसे Haskell2010 spec से हटा दिया गया था और जीएचसी अब इसे हग्स के विपरीत डिफ़ॉल्ट रूप से सक्षम नहीं करता है जिसे नवीनतम स्पेस में अपडेट नहीं किया गया है। इसे -XNPlusKPatterns ध्वज सक्षम के साथ जीएचसीआई के साथ संकलित करना चाहिए। अधिक जानकारी के लिए

this देखें।

9

हैकेल 98 में यह कानूनी है, लेकिन इसे हैकेल 2010 में प्रतिबंधित कर दिया गया था, और यह जीएचसी लागू करने के हाल के संस्करण हैं। दूसरी ओर हग्स साल के लिए नवीनीकृत नहीं किया गया था, और हास्केल 98.

n + K पैटर्न को लागू करता है को नापसंद कर रहे हैं के बाद से वहाँ उदाहरण n+1 के लिए संख्या है जो मैच मौजूद हो सकता है लेकिन कोई n कि कि n+1 फिट होता है।

चल विचार बिन्दु संख्या: एक नंबर जो फिट बैठता है n+1 मौजूद है (४२९४९६७२९६ :: फ्लोट n + 1 4294967295 के लिए है, लेकिन यह संख्या एक फ्लोट में फिट नहीं किया जा सकता - तुलना round (4294967296 :: Float) और round (4294967295 :: Float), दोनों उपज +४२९४९६७२९६) ।

इसके अलावा आप + (हैकेल ऑपरेटर ओवरलोडिंग का समर्थन करता है) तो रिबाउंड हो सकता है तो पैटर्न मिलान का क्या अर्थ होगा? ऐसी अस्पष्टताओं से बचने के लिए, एन + के पैटर्न को अस्वीकार कर दिया गया था।

आप n + K पैटर्न वैसे भी उपयोग करना चाहते हैं, तो आप अपने स्रोत फ़ाइलों के ऊपरी भाग पर भाषा pragma उपयोग कर सकते हैं:

{-# LANGUAGE NPlusKPatterns #-} 

पुनश्च: मेरा मानना ​​है कि यह सब this email thread में शुरू हुई।