在OCaml中展开元组

Nut*_*tel 5 ocaml

有没有办法将函数应用于元组成员作为函数参数?或者,如果没有,我可以无论如何创建一个具有任意数量的参数的函数,并在其正文中将另一个函数应用于"尾部",因为它将是它的参数?

Mic*_*and 7

在一般情况下,没有.对于2个参数的情况,您可以使用电池扩展到Pervasives中curryuncurry函数.

也许是可能的煮东西了的Obj模块,如的内部printf做的,但我会留远远离那.难点在于类型系统没有为您提供表达广义curryuncurry函数类型的方法.类型系统不允许你"计算"元组的长度 - 一个2元组是一个2元组,你没有办法表达它(a*b*c)真的(a*b)有一个额外的组件. printf得到编译器的特殊支持,使类型正确运行,并导致函数类型成为格式类型的一部分(因此类似的解决方案不适用于元组).


Dan*_*zli 7

语言本身不允许您在任意大小的元组上定义函数.

然而,可以通过遵循这种折叠技术来定义具有任意数量参数的函数(它在那里描述了SML,但在OCaml中同样有效).