在OCaml中展开元组

问题描述:

是否有任何方法将函数应用于元组成员作为函数参数?或者,如果没有,我可以用任意数量的参数创建一个函数,并且在它的主体中将一些另外的函数应用到“尾部”,因为它是它的参数?在OCaml中展开元组

在一般情况下,没有。对于2个参数的情况,您可以使用Batteries extensions to Pervasives中的curryuncurry函数。

可能可以煮东西了与Obj模块,像printf的内部做的,但我会留远远离那。困难在于类型系统不能给你一种表达广义的curryuncurry函数的类型。类型系统不允许您在元组的长度上“计算” - 2元组是2元组,并且您无法用其他组件表示(a*b*c)实际上是(a*b)printf得到编译器的特别支持,使得类型能够正常工作,并且它导致函数类型成为格式类型的一部分(所以类似的解决方案不适用于元组)。

该语言本身不允许你在任意大小的元组上定义一个函数。

然而,通过遵循this folding technique(它在SML中描述,但在OCaml中同样适用),可以使用任意数量的参数定义函数。