gpt4 book ai didi

function - SML : why functions always take one-argument make language flexible

转载 作者:行者123 更新时间:2023-12-02 22:03:31 24 4
gpt4 key购买 nike

我(从一本 SML 书中)了解到,SML 中的函数总是只接受一个参数:一个元组。接受多个参数的函数只是一个接受一个元组作为参数的函数,通过函数绑定(bind)中的元组绑定(bind)来实现。我明白这一点。

但是在这之后,书上说了一些我不明白的事情:

这一点使得SML语言设计灵活而优雅,你可以做一些Java中做不到的有用的事情。

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

最佳答案

使用元组而不是多个参数增加了灵 active ,因为高阶函数可以与任何“元数”的函数一起使用。例如,要创建列表[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 中的元组。函数通常使用柯里化(Currying)而不是元组来表示多个参数,但我想你的书还没有开始柯里化(Currying)。柯里化(Currying)函数不能以与上述相同的方式使用,因此从这个意义上来说它们并不那么通用。

关于function - SML : why functions always take one-argument make language flexible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14550740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com