Haskell:解析模式中的错误

问题描述:

谁愿意告诉我这段代码有什么问题(在语法上)?Haskell:解析模式中的错误

-- 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

你需要一些括号:

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

谢谢,我记得我有过。像之前一样;)。 您是否通常总是使用(x:xs)而不是x:xs来防止错误? – user905686 2011-12-19 13:55:15

+1

@ user905686:在一种模式中,是的。 – kennytm 2011-12-19 13:58:14

您需要将构造函数模式(或称为它们被称为)放入隐含关系中。

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