2011-12-19 12 views
15

में पार्स त्रुटि मुझे कौन बताती है कि इस कोड (वाक्य रचनात्मक रूप से) में क्या गलत है?हास्केल: पैटर्न

-- merge two sorted lists 
mergeX [] b res = b ++ res 
mergeX a [] res = a ++ res 
mergeX a:as b:bs res 
    | a > b  = mergeX as b:bs a:res 
    | otherwise = mergeX a:as bs b:res 

दुभाषिया: पैटर्न में

पार्स त्रुटि: mergeX

उत्तर

30

आप कुछ कोष्ठक की जरूरत है:

mergeX [] b res = b ++ res 
mergeX a [] res = a ++ res 
mergeX (a:as) (b:bs) res 
    | a > b  = mergeX as (b:bs) (a:res) 
    | otherwise = mergeX (a:as) bs (b:res) 

कारण यह है कि : समारोह की तुलना में कम पूर्वता है आवेदन, तो mergeX a:as b:bs res होगा के रूप में पार्स किया गया:

(mergeX a):(as b):(bs res) 

जो एक त्रुटि है।

+0

धन्यवाद, मुझे याद है कि मेरे पास sth था। पहले की तरह;)। क्या आप आमतौर पर गलतियों को रोकने के लिए x: xs के बजाय हमेशा (x: xs) का उपयोग करते हैं? – user905686

+1

@ user905686: एक पैटर्न में, हाँ। – kennytm

1

आपको पैराेंथेस में कन्स्ट्रक्टर पैटर्न (या फिर उन्हें बुलाया जाता है) डालना होगा।

mergeX (a:as) (b:bs) res 
संबंधित मुद्दे