【问题标题】:Haskell: Parse error in patternHaskell:模式中的解析错误
【发布时间】:2012-01-23 14:36:34
【问题描述】:

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

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

【问题讨论】:

    标签: haskell pattern-matching operator-precedence parse-error


    【解决方案1】:

    你需要一些括号:

    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)
    

    这是一个错误。

    【讨论】:

    • 谢谢,我记得我有过某事。像以前那样;)。你通常总是使用 (x:xs) 而不是 x:xs 来防止错误吗?
    • @user905686:在一个模式中,是的。
    【解决方案2】:

    您需要将构造函数模式(或者无论它们如何调用)放在括号中。

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

    【讨论】:

      猜你喜欢
      • 2013-01-29
      • 1970-01-01
      • 2015-03-14
      • 2012-12-24
      • 2012-09-28
      • 2017-10-29
      • 2019-05-03
      • 2017-07-18
      • 2018-02-14
      相关资源
      最近更新 更多