-3

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

f3 1 (f2 x) 是

我确实理解为什么这是非法的,我认为它与第二个参数(f2 x)有关。谁能给我解释一下?

4

1 回答 1

8

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

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

(f2 x)片段中的部分

f3 1 (f2 x) y

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

f3 1 (f2 x) y = whatever

最接近的法律功能定义是

f3 1 (F2 x) y = ...

带有(一元)值构造函数 F2

于 2012-04-26T19:49:53.947 回答