gpt4 book ai didi

functional-programming - Curry 函数出现问题 (SML/NJ)

转载 作者:行者123 更新时间:2023-12-04 08:41:09 26 4
gpt4 key购买 nike

Often we are interested in computing f(i) i=m n∑ , the sum of function values f(i) for i = m through n. Define ‘sigma f m n’ which computes f(i) i=m n∑ . This is different from defining ‘sigma (f, m, n)’



我需要编写此函数的 Curried 版本。我很难理解这实际上是如何工作的。我知道 Curry 函数是接受一个函数并产生一个函数的东西。这会是 curry 函数的一个例子吗?
fun myCurry f x = f(x)

至于设置我的问题,这是一个可以接受的开始吗?
fun sigma f m n =

我没有更进一步,因为我无法真正理解我被要求做什么。

最佳答案

事实上,柯里化(Currying)函数并不是一个接收一个函数并产生另一个函数的函数。那是一个高阶函数。

柯里化(Currying)函数只是一个接受多个参数的函数,并且可以通过只给它一个参数来部分应用。

例如,对于您的 sigma 问题,

fun sigma (f,m,n) = ...

不是柯里化(Currying)函数,因为它只需要一个参数(元组 (f,m,n) 。)
fun sigma f m n = ...

但是,它是一个柯里化(Currying)函数,因为它需要三个参数,并且可以这样说
val sigmasquare = sigma (fn x => x * x)

,通过给它的第一个参数部分应用 sigma。

一个更简单的例子是
fun add (x,y) = x + y

这是一个非柯里化(Currying)函数。要评估它,你必须给它它的论点,它包括 x。和 y . add (3,5)在这种情况下,将评估为 8。
fun add x y = x + y

是同一函数的 curry 版本。这可以通过给出它来部分评估 x .例如, add 3将评估一个函数,该函数将为其参数添加三个。

通过将前面的示例视为匿名或 lambda 函数可以更清楚地看到这一点。

第一个相当于 fn (x,y) => x + y ,这显然需要两个整数并计算为一个整数。

第二个相当于 fn x => fn y => x + y ,它接受一个 int 并评估为一个采用另一个 int 并评估为 int 的函数。

因此,第一个的类型是 (int * int) -> int , 而第二个的类型是 int -> int -> int .

希望这可以清除一些 curry 。

关于functional-programming - Curry 函数出现问题 (SML/NJ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18989843/

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