Haskell:parsing模式中的错误
谁喜欢告诉我这个代码有什么问题(在语法上)?
-- 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
将被parsing为:
(mergeX a):(as b):(bs res)
这是一个错误。
你需要把构造函数模式(或者叫做)放在隐含的位置。
mergeX (a:as) (b:bs) res