此代码:
validate :: Matrix-> Bool
validate x: [] = length x
validate x: xs = (length x == lenght.head $ xs) == (validate tail xs)
产生此错误:
Parse error in pattern: validate
为什么?
我的目标是如果矩阵采用正确的模式,即所有行中的列数相等,则返回 true,反之亦然。
函数应用程序的优先级高于运算符,如:
。所以编译器认为:
validate x:[]
方法:
(validate x):[] = ..
这当然是错误的。
因此,您应该使用括号明确消除歧义:
validate (x:[]) = ..
同样,对于第二行:
validate (x:xs) = ..
此外,如果您在函数应用程序中没有提供任何括号,则假定它是保留关联的,因此:
validate tail xs
与:
(validate tail) xs
而不是:
validate (tail xs)
常见的做法是使用 $
运算符,如下所示:
validate $ tail xs