在OCaml中展开元组

在OCaml中展开元组,ocaml,Ocaml,有没有办法将函数作为函数参数应用于元组成员?或者如果没有,我是否可以创建一个具有任意数量参数的函数,并在其主体中对“tail”应用另一个函数,就像它的参数一样?在一般情况下,否。对于两个参数的情况,您可以在中使用curry和uncurry函数 也许可以用Obj模块编写一些东西,比如printfdo的内部结构,但我会远离它。困难在于类型系统没有提供一种方式来表示广义curry或uncurry函数的类型。类型系统不允许您“计算”一个元组的长度-一个2元组是一个2元组,并且您没有一种方式来表示(a*b

有没有办法将函数作为函数参数应用于元组成员?或者如果没有,我是否可以创建一个具有任意数量参数的函数,并在其主体中对“tail”应用另一个函数,就像它的参数一样?

在一般情况下,否。对于两个参数的情况,您可以在中使用
curry
uncurry
函数


也许可以用
Obj
模块编写一些东西,比如
printf
do的内部结构,但我会远离它。困难在于类型系统没有提供一种方式来表示广义
curry
uncurry
函数的类型。类型系统不允许您“计算”一个元组的长度-一个2元组是一个2元组,并且您没有一种方式来表示
(a*b*c)
实际上是
(a*b)
,带有一个附加组件
printf
编译器提供了特殊的支持,以使类型正确工作,并导致函数类型成为格式类型的一部分(因此类似的解决方案不适用于元组)。

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

但是,可以通过以下方式定义具有任意数量参数的函数(这里对SML进行了描述,但在OCaml中也同样适用)