2013-01-10 52 views
17

मैंने हास्केल सीखने के लिए एरिक मीजर के 13-part lectures (और ग्राहम हटन की slides) के माध्यम से अपना रास्ता शुरू करना शुरू कर दिया है।एन + के पैटर्न के लिए पैटर्न में हैकेल पार्स त्रुटि

अध्याय 4 के लिए स्लाइड पर, पृष्ठ 13 पर, यह एन + के पैटर्न के लिए पैटर्न-मिलान वाक्यविन्यास प्रस्तुत करता है। विशेष रूप से, यह कहते हैं:

गणित के क्षेत्र में के रूप में, पूर्णांकों पर कार्यों n + K पैटर्न, जहां n एक पूर्णांक चर और कश्मीर> 0 एक पूर्णांक स्थिर है है का उपयोग कर परिभाषित किया जा सकता।

pred :: Int -> Int 
pred (n+1) = n 

जब मैं आरईपीएल मैं एक त्रुटि संदेश मिलता में अपने दम पर इस की कोशिश की: इसी प्रकार

*Main> let mypred (n+1) = n 

<interactive>:65:13: Parse error in pattern: n + 1 

, अगर मैं एक *.hs फाइल में यह कोशिश

mypred :: Int -> Int 
mypred (n+1) = n 

कंपाइलर एक समान शिकायत देता है:

/Users/pohl/Code/praxis-haskell/helloworld.hs:14:9: 
    Parse error in pattern: n + 1 

क्या मैं समझ नहीं पा रहा हूं कि एन + के पैटर्न का उपयोग कैसे किया जाता है?

+0

स्लाइड के लिए लिंक टूटा हुआ है, क्या आप नया लिंक साझा कर सकते हैं? – weima

+0

क्या आपको 404 मिल रहे थे? यह अभी भी मेरे लिए काम करता है। http://www.cs.nott.ac.uk/~gmh/book.html – pohl

उत्तर

34

आपको इसे -XNPlusKPatterns द्वारा सक्षम करना होगा।

ghci -XNPlusKPatterns 
Prelude> let mypred (n+1) = n 
Prelude> mypred 2 
1 

इसी तरह hs फ़ाइल में।

{-# LANGUAGE NPlusKPatterns #-} 

mypred :: Int -> Int 
mypred (n+1) = n 

GHCi में लोड करने के बाद

*Main> mypred 2 
1 
+1

ठीक है, यह चाल है। (धन्यवाद!) क्या यह एक प्रयोगात्मक विशेषता है? क्या किसी को पता है कि इस तरह से इसे सक्षम क्यों किया जाना चाहिए? – pohl

+7

@ पोहल मुझे लगता है कि इसे हटा दिया गया था और अब केवल विस्तार के रूप में उपलब्ध है। http://hackage.haskell.org/trac/haskell-prime/wiki/RemoveNPlusK – Satvik

+4

कूल। यह ऐसी सोच में एक छोटी सी झलक है जिसने इस तरह की एक सुंदर भाषा लाई है। कुछ हटाने के लिए ताज़ा करना! – pohl

9

मैं समझ नहीं कैसे n + K पैटर्न इस्तेमाल किया जा करने का इरादा कर रहे हैं हूँ?

दरअसल, आजकल n+k पैटर्न खराब अभ्यास माना जाता है। इसका मुख्य कारण यह है कि सिंटैक्स वास्तव में हास्केल में किसी और चीज की तरह नहीं दिखता है, + भाग वास्तव में + का उपयोग नहीं कर रहा है जो कि दायरे में है, यह कहने के विपरीत कि do नोटेशन कैसे काम करता है। इसके अलावा, viewpatterns एक्सटेंशन एक सामान्यीकरण है जो में और अधिक सेटिंग्स में उपयोगी है।

अधिक जानकारी here पर क्यों हटा दी गई थी।