在OCaml中展开元组
问题描述:
是否有任何方法将函数应用于元组成员作为函数参数?或者,如果没有,我可以用任意数量的参数创建一个函数,并且在它的主体中将一些另外的函数应用到“尾部”,因为它是它的参数?在OCaml中展开元组
答
在一般情况下,没有。对于2个参数的情况,您可以使用Batteries extensions to Pervasives中的curry
和uncurry
函数。
它可能可以煮东西了与Obj
模块,像printf
的内部做的,但我会留远远离那。困难在于类型系统不能给你一种表达广义的curry
或uncurry
函数的类型。类型系统不允许您在元组的长度上“计算” - 2元组是2元组,并且您无法用其他组件表示(a*b*c)
实际上是(a*b)
。 printf
得到编译器的特别支持,使得类型能够正常工作,并且它导致函数类型成为格式类型的一部分(所以类似的解决方案不适用于元组)。