我在几篇文章和博客中看到了对curried函数的引用,但我找不到一个很好的解释(或者至少有一个解释是有意义的!)
发布于 2008-08-30 20:19:51
Currying是将一个接受多个参数的函数分解为一系列函数,每个函数只接受一个参数。下面是一个用JavaScript编写的例子:
function add (a, b) {
return a + b;
}
add(3, 4); // returns 7这是一个接受两个参数a和b并返回它们的和的函数。我们现在将对此函数执行curry:
function add (a) {
return function (b) {
return a + b;
}
}这是一个接受一个参数a的函数,并返回一个接受另一个参数b的函数,该函数返回它们的和。
add(3)(4);
var add3 = add(3);
add3(4);第一条语句返回7,与add(3, 4)语句类似。第二条语句定义了一个名为add3的新函数,该函数将在其参数上加上3。(这可能是一些人所说的闭合。)第三条语句使用add3操作将3与4相加,结果也是7。
发布于 2009-08-30 02:08:20
在函数代数中,处理带有多个参数的函数(或相当于一个N元组的参数)有点不雅--但是,正如Mosesönfinkel(以及独立的Haskell Curry)所证明的那样,这是不必要的:您所需要的只是一个参数的函数。
那么,你如何处理一些你自然会表达为,比如说,f(x,y)的东西?你把它等同于f(x)(y) -- f(x),叫它g,是一个函数,你把这个函数应用到y上。换句话说,您只有一个参数的函数--但是其中一些函数返回其他函数(这些函数也有一个参数;-)。
像往常一样,wikipedia对此有一个很好的摘要条目,有许多有用的指针(可能包括关于您最喜欢的语言的指针;-)以及稍微严格的数学处理。
发布于 2009-08-30 02:22:55
下面是一个具体的例子:
假设你有一个计算作用在物体上的引力的函数。如果你不知道这个公式,你可以找到here。此函数接受三个必需的参数作为参数。
现在,在地球上,你只需要计算这个星球上物体的力。在函数式语言中,您可以将地球的质量传递给函数,然后对其进行部分计算。你得到的是另一个函数,它只需要两个参数,就可以计算地球上物体的引力。这就是所谓的currying。
https://stackoverflow.com/questions/36314
复制相似问题