18

हास्केल संकलक निम्नलिखित समारोह पर एक त्रुटि फेंकता पर विफल:हास्केल पैटर्न मिलान नकारात्मक संख्या

balancedMax :: Int -> Int -> Int 
balancedMax 1 _ = -1 
balancedMax _ 1 = -1 
balancedMax a b = max a b 

क्यों पैटर्न नकारात्मक पर असफल मिलान करता है:

balancedMax :: Int -> Int -> Int 
balancedMax -1 _ = -1 
balancedMax _ -1 = -1 
balancedMax a b = max a b 

संकेत Flipping समस्या का हल , और एक साफ कामकाज क्या है?

उत्तर

30

यह विफल रहता है क्योंकि ऐसा लगता है कि आप शून्य ऑपरेटर को फिर से परिभाषित करने की कोशिश कर रहे हैं, क्योंकि f -1 = ... को f - 1 = ... के रूप में पार्स किया गया है।

इस तुम सिर्फ राशि कोष्ठकों जोड़ने के लिए ठीक करने के लिए:

balancedMax :: Int -> Int -> Int 
balancedMax (-1) _ = -1 
balancedMax _ (-1) = -1 
balancedMax a b = max a b 

एक ही बात भाव में होता है। एक नकारात्मक शाब्दिक के साथ balancedMax पर कॉल करने के लिए, आपको भी ब्रांड्स की आवश्यकता होगी।

(-) f 1 = .... 

जो इस तरह एक समारोह को परिभाषित करने के समान है::

6

क्योंकि f -1 = ... रूप f - 1 = ....

कौन करता है, तो आप नहीं जानते कि पार्स हो जाता है, वही अर्थ है

somefunc x 1 = x + 1 

जो बराबर होता है इस तरह somefunc() को परिभाषित:

x `somefunc` 1 = x + 1 

यह सिर्फ इतना है कि के साथ (-) आप जब इन्फ़िक्स में स्थिति है, यानी अपने दो तर्क के बीच स्थित यह का उपयोग कर बैकटिक लिखने के लिए नहीं है।

दो शुरुआती हैकेल पुस्तकें जिन्हें मैंने देखा है, दोनों ने आपको चेतावनी दी है कि यूनरी - कोष्ठक के साथ उपयोग करने की आवश्यकता है, उदा। (-3)।

संबंधित मुद्दे