Haskell非法模式匹配

-2 haskell pattern-matching

我被告知这个函数声明是非法的:

f3 1(f2 x)y

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

Dan*_*her 8

在函数定义中,函数的参数必须是模式,即它们必须是模式

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

所述部分(f2 x)在所述片段

f3 1 (f2 x) y
Run Code Online (Sandbox Code Playgroud)

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

f3 1 (f2 x) y = whatever
Run Code Online (Sandbox Code Playgroud)

最接近的法律功能定义是

f3 1 (F2 x) y = ...
Run Code Online (Sandbox Code Playgroud)

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