有没有办法将函数应用于元组成员作为函数参数?或者如果没有,我能否以任意方式创建一个具有任意数量参数的函数,并在其体中将另一个函数应用于“尾部”,因为它将成为它的参数?
答案 0 :(得分:7)
在一般情况下,没有。对于2个参数的情况,您可以使用Batteries extensions to Pervasives中的curry
和uncurry
函数。
可能可以使用Obj
模块进行烹饪,就像printf
的内部一样,但我会远离它。难点在于类型系统没有为您提供表达广义curry
或uncurry
函数类型的方法。类型系统不允许你“计算”一个元组的长度 - 一个2元组是一个2元组,你没有办法表达(a*b*c)
真的是(a*b)
一个额外的组件。 printf
得到编译器的特殊支持,使类型正确运行,并导致函数类型成为格式类型的一部分(因此类似的解决方案不适用于元组)。
答案 1 :(得分:7)
语言本身不允许您在任意大小的元组上定义函数。
然而,可以通过跟随this folding technique定义具有任意数量参数的函数(它在那里描述为SML但在OCaml中同样有效)。