SML:为什么函数总是采用单参数使语言变得灵活

hqt*_*hqt 4 function sml

我(从SML书中)了解到,SML中的函数总是只有一个参数:一个元组.带有多个参数的函数只是一个函数,它将一个元组作为参数,在函数绑定中使用元组绑定实现.我理解这一点.

但在此之后,这本书说了一些我不理解的东西:

this point makes SML language flexible and elegant design, and you can do something useful that you cannot do in Java.

为什么这种设计使语言变得灵活?什么是文本指的是,SML可以但java不能?

sep*_*p2k 6

使用元组而不是多个参数可以增加灵活性,即高阶函数可以使用任何"arity"的函数.例如,要创建列表[f x, f y, f z],您可以使用高阶函数,map如下所示:

map f [x, y, z]
Run Code Online (Sandbox Code Playgroud)

这很容易 - 你可以用任何语言做到这一点.但现在让我们考虑f实际需要两个参数的情况.如果f是一个真正的二元函数(假设SML有这样的函数),我们需要一个不同的版本map可以使用二进制函数而不是一元函数(如果我们想要使用3元函数,我们就会还需要一个版本).但是使用元组我们可以像这样写:

map f [(x,a), (y,b), (z,c)]
Run Code Online (Sandbox Code Playgroud)

这将创建列表[f (x,a), f (y,b), f (z,c)].

PS:所有需要多个参数的函数在SML中都采用元组并不是真的.通常函数使用currying而不是元组来表示多个参数,但我认为你的书还没有被讨论.咖喱功能不能以与上述相同的方式使用,因此它们在这个意义上并不一般.