【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 2012-01-23
      • 2013-01-29
      • 1970-01-01
      • 2015-03-14
      • 2012-12-24
      • 2017-10-29
      • 2019-05-03
      • 1970-01-01
      相关资源
      最近更新 更多