我(从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不能?
使用元组而不是多个参数可以增加灵活性,即高阶函数可以使用任何"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而不是元组来表示多个参数,但我认为你的书还没有被讨论.咖喱功能不能以与上述相同的方式使用,因此它们在这个意义上并不一般.
归档时间: |
|
查看次数: |
1191 次 |
最近记录: |