在OCaml中展开元组

时间:2010-12-20 02:44:05

标签: ocaml

有没有办法将函数应用于元组成员作为函数参数?或者如果没有,我能否以任意方式创建一个具有任意数量参数的函数,并在其体中将另一个函数应用于“尾部”,因为它将成为它的参数?

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:7)

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

然而,可以通过跟随this folding technique定义具有任意数量参数的函数(它在那里描述为SML但在OCaml中同样有效)。