【问题标题】:Haskell - Parse error in pattern [duplicate]Haskell - 模式中的解析错误[重复]
【发布时间】:2012-09-28 16:35:55
【问题描述】:
这段代码:
validate :: Matrix-> Bool
validate x: [] = length x
validate x: xs = (length x == lenght.head $ xs) == (validate tail xs)
产生这个错误:
Parse error in pattern: validate
为什么?
如果矩阵的模式正确,我的目标是返回 true,即所有行中的列数相等,反之亦然。
【问题讨论】:
标签:
haskell
pattern-matching
parse-error
【解决方案1】:
函数应用的优先级高于:等运算符。所以编译器认为:
validate x:[]
意思是:
(validate x):[] = ..
这当然是错误的。
所以你应该使用括号明确地消除歧义:
validate (x:[]) = ..
第二行也是如此:
validate (x:xs) = ..
此外,如果您在函数应用程序中未提供任何括号,则假定它是左关联的,因此:
validate tail xs
等同于:
(validate tail) xs
而不是:
validate (tail xs)
一种常见的做法是使用$ 运算符,如下所示:
validate $ tail xs