我(从一本 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 不能的文字指的是什么?
使用元组而不是多个参数增加了灵活性,因为高阶函数可以与任何“元数”的函数一起使用。例如创建列表[f x, f y, f z]
,可以使用高阶函数map
像这样:
map f [x, y, z]
这很简单 - 您可以用任何语言做到这一点。但现在让我们考虑一下这种情况f
实际上需要两个参数。如果f
是一个真正的二元函数(假设 SML 有这样的函数),我们需要一个不同版本的map
它可以使用二元函数而不是一元函数(如果我们想使用三元函数,我们也需要一个版本)。然而使用元组我们可以这样写:
map f [(x,a), (y,b), (z,c)]
这将创建列表[f (x,a), f (y,b), f (z,c)]
.
PS:并不是所有需要多个参数的函数都采用 SML 中的元组。函数通常使用柯里化而不是元组来表示多个参数,但我想你的书还没有开始柯里化。柯里化函数不能以与上述相同的方式使用,因此从这个意义上来说它们并不那么通用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)