Haskell非法模式匹配

时间:2012-04-26 19:13:16

标签: haskell pattern-matching

我被告知此功能声明是非法的:

f3 1(f2 x)y

我明白为什么这是非法的,我认为它与第二个参数(f2 x)有关。任何人都可以向我解释这个吗?

1 个答案:

答案 0 :(得分:8)

在函数定义中,函数的参数必须是patterns,也就是说,它们必须是

  • 一个通配符_,它匹配所有内容并且不绑定任何内容,
  • 变量模式var,它匹配所有内容并将相应的参数绑定到参数
  • 一个文字(整数,浮点,字符或字符串),它匹配等于模式的参数
  • 一个值构造函数应用于与arity需求一样多的模式(因此模式可以嵌套),
  • 列表模式[elem1, elem2, elem3, elem4]
  • 带标签的图案Con{ field1 = value1, field2 = value2 }
  • 带括号的模式(pattern)
  • 元组模式(pattern1, pattern2, pattern3)
  • 一个 as-pattern var@pattern,将整个参数绑定到var,并将组件绑定到pattern的相应部分(如果匹配),或者< / LI>
  • 一个无可辩驳的模式~pattern,它绑定参数resp。其部分为pattern。它的部分,如果参数实际上与pattern不匹配,则会导致运行时错误。

片段中的(f2 x)部分

f3 1 (f2 x) y

不是模式,而是表达式,函数(f2)应用于值(x),因此函数定义不能具有形式

f3 1 (f2 x) y = whatever

最接近的法律功能定义是

f3 1 (F2 x) y = ...

使用(一元)值构造函数 F2