Haskell-模式中的解析错误



此代码:

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

相关内容

  • 没有找到相关文章

最新更新