Currying.
在 ML 中,每一个函数只有一个参数;多参数函数的形参本质上是一个包含多个变量的 tuple。
然而除此之外,有另一种方式可以实现所谓的多参数,那就是函数的 currying。即,通过匿名函数的嵌套实现类多参数函数结构,再通过语法糖进行等价转换。
注意第三条语句是第二条语句的 syntactic sugar,三个函数的作用完全相同。
1 | fun p(x, y, z) = e |
通过 currying,我们还能实现函数的部分化应用 (partial application),从而消除 redundant arguments。
1 | fun curry_p x y z = ... z |
基于 tuple 实现的多参数函数可以与 currying 多参数函数相互转换。
1 | fun uncurry f x y = f(x, y) |