Haskell:模式中的解析错误
Posted
技术标签:
【中文标题】Haskell:模式中的解析错误【英文标题】:Haskell: Parse error in pattern 【发布时间】: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
【问题讨论】:
【参考方案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
【讨论】:
以上是关于Haskell:模式中的解析错误的主要内容,如果未能解决你的问题,请参考以下文章
Haskell 布尔表达式:解析错误(可能不正确的缩进或不匹配的括号)