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