首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是“Currying”?

什么是“Currying”?
EN

Stack Overflow用户
提问于 2008-08-31 04:12:56
回答 22查看 185.8K关注 0票数 722

我在几篇文章和博客中看到了对curried函数的引用,但我找不到一个很好的解释(或者至少有一个解释是有意义的!)

EN

回答 22

Stack Overflow用户

回答已采纳

发布于 2008-08-30 20:19:51

Currying是将一个接受多个参数的函数分解为一系列函数,每个函数只接受一个参数。下面是一个用JavaScript编写的例子:

代码语言:javascript
复制
function add (a, b) {
  return a + b;
}

add(3, 4); // returns 7

这是一个接受两个参数a和b并返回它们的和的函数。我们现在将对此函数执行curry:

代码语言:javascript
复制
function add (a) {
  return function (b) {
    return a + b;
  }
}

这是一个接受一个参数a的函数,并返回一个接受另一个参数b的函数,该函数返回它们的和。

代码语言:javascript
复制
add(3)(4);

var add3 = add(3);

add3(4);

第一条语句返回7,与add(3, 4)语句类似。第二条语句定义了一个名为add3的新函数,该函数将在其参数上加上3。(这可能是一些人所说的闭合。)第三条语句使用add3操作将3与4相加,结果也是7。

票数 989
EN

Stack Overflow用户

发布于 2009-08-30 02:08:20

在函数代数中,处理带有多个参数的函数(或相当于一个N元组的参数)有点不雅--但是,正如Mosesönfinkel(以及独立的Haskell Curry)所证明的那样,这是不必要的:您所需要的只是一个参数的函数。

那么,你如何处理一些你自然会表达为,比如说,f(x,y)的东西?你把它等同于f(x)(y) -- f(x),叫它g,是一个函数,你把这个函数应用到y上。换句话说,您只有一个参数的函数--但是其中一些函数返回其他函数(这些函数也有一个参数;-)。

像往常一样,wikipedia对此有一个很好的摘要条目,有许多有用的指针(可能包括关于您最喜欢的语言的指针;-)以及稍微严格的数学处理。

票数 134
EN

Stack Overflow用户

发布于 2009-08-30 02:22:55

下面是一个具体的例子:

假设你有一个计算作用在物体上的引力的函数。如果你不知道这个公式,你可以找到here。此函数接受三个必需的参数作为参数。

现在,在地球上,你只需要计算这个星球上物体的力。在函数式语言中,您可以将地球的质量传递给函数,然后对其进行部分计算。你得到的是另一个函数,它只需要两个参数,就可以计算地球上物体的引力。这就是所谓的currying。

票数 112
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档