Haskell:解析模式错误

Haskell: Parse error in pattern

谁喜欢告诉我这段代码有什么问题(语法上)?

1
2
3
4
5
6
-- 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

口译员:

Parse error in pattern: mergeX


您需要一些括号:

1
2
3
4
5
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将被解析为:

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

这是一个错误。


您需要将构造函数模式(或它们被称为)放在括号中。

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