我被告知此功能声明是非法的:
f3 1(f2 x)y
我明白为什么这是非法的,我认为它与第二个参数(f2 x)有关。任何人都可以向我解释这个吗?
答案 0 :(得分:8)
在函数定义中,函数的参数必须是patterns,也就是说,它们必须是
_
,它匹配所有内容并且不绑定任何内容,var
,它匹配所有内容并将相应的参数绑定到参数[elem1, elem2, elem3, elem4]
,Con{ field1 = value1, field2 = value2 }
,(pattern)
,(pattern1, pattern2, pattern3)
,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
。