1

这段代码:

validate :: Matrix-> Bool
validate x: [] = length x
validate x: xs = (length x == lenght.head $ xs) == (validate tail xs)

产生此错误:

Parse error in pattern: validate

为什么?

如果矩阵的模式正确,我的目标是返回 true,即所有行中的列数相等,反之亦然。

4

1 回答 1

13

函数应用的优先级高于:. 所以编译器认为:

validate x:[]

方法:

(validate x):[] = ..

这当然是错误的。

因此,您应该使用括号明确地消除歧义:

validate (x:[]) = ..

同样对于第二行:

validate (x:xs) = ..

此外,如果您在函数应用程序中未提供任何括号,则假定它是左关联的,因此:

validate tail xs

等同于:

(validate tail) xs

并不是:

validate (tail xs)

一种常见的做法是使用$运算符,如下所示:

validate $ tail xs
于 2012-10-08T12:16:28.497 回答