Haskell:解析模式中的错误

use*_*686 17 haskell pattern-matching operator-precedence parse-error

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

-- 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
Run Code Online (Sandbox Code Playgroud)

解释:

解析模式中的错误:mergeX

ken*_*ytm 34

你需要一些括号:

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)
Run Code Online (Sandbox Code Playgroud)

原因是因为:它的优先级低于函数应用程序,因此mergeX a:as b:bs res将被解析为:

(mergeX a):(as b):(bs res)
Run Code Online (Sandbox Code Playgroud)

这是一个错误.

  • @ user905686:在一个模式中,是的。 (2认同)