问题标签 [currying]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
6797 浏览

f# - F# 柯里化函数

任何人都有一个不错的例子,最好是实用/有用的,他们可以发布演示这个概念吗?

0 投票
22 回答
195241 浏览

javascript - 什么是“柯里化”?

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

0 投票
17 回答
44918 浏览

javascript - JavaScript curry:有哪些实际应用?

我想我还没学会咖喱。我明白它的作用,以及如何去做。我只是想不出我会使用它的情况。

你在哪里使用 JavaScript 中的柯里化(或者主要库在哪里使用它)?欢迎使用 DOM 操作或一般应用程序开发示例。

其中一个答案提到了动画。类似的函数slideUpfadeIn将元素作为参数,通常是一个柯里化函数,返回内置默认“动画函数”的高阶函数。为什么这比仅仅应用带有一些默认值的更高层函数更好?

使用它有什么缺点吗?

根据这里的要求,有一些关于 JavaScript currying 的好资源:

当他们在评论中出现时,我会添加更多内容。


因此,根据答案,一般来说,柯里化和部分应用是便利技术。

如果您经常通过使用相同配置调用高级函数来“优化”高级函数,则可以对高级函数进行 curry(或使用 Resig 的部分)来创建简单、简洁的辅助方法。

0 投票
10 回答
30308 浏览

c++ - 如何在 C++ 中进行柯里化?

什么是咖喱?

如何在 C++ 中进行柯里化?

请解释 STL 容器中的活页夹?

0 投票
15 回答
59220 浏览

language-agnostic - 柯里化和部分应用有什么区别?

我经常在网上看到各种各样的抱怨,说别人的柯里化例子不是柯里化,实际上只是部分应用。

对于什么是部分应用程序,或者它与柯里化有何不同,我还没有找到一个体面的解释。似乎存在一种普遍的混淆,等效的例子在某些地方被描述为柯里化,而在其他地方则被描述为部分应用。

有人可以为我提供这两个术语的定义,以及它们之间的区别细节吗?

0 投票
3 回答
1834 浏览

programming-languages - Scheme中柯里化函数的实现

当我执行以下操作时会发生什么?

我知道我可以这样做:

现在我可以使用咖喱了。我很好奇的是函数的定义。是否行

以 x 作为参数创建一个新的 lambda,然后在 1 上调用它?或者它是否比这更聪明,它只是重新使用现有的。(例如,如果我这样做(curried 0),该((func x) 1)行将等同于(curried 1)- PLAI Scheme 这样做吗?)

0 投票
1 回答
482 浏览

closures - 闭包和柯里化的区别和可能的相似之处是什么?

我已经阅读了一些关于闭包和柯里化的帖子,但我觉得我没有找到答案。那么闭包和柯里化的区别和相似之处是什么?谢谢您的帮助 :)

0 投票
3 回答
22759 浏览

c# - C# 中的正确柯里化

给定一个DoSomething采用(无参数)函数并以某种方式处理它的方法。有没有比下面的代码片段更好的方法来为带参数的函数创建“重载”?

0 投票
3 回答
895 浏览

c# - 为什么我不能使用扩展方法隐式转换委托?

我正在尝试找出一种自动将某些内容投射到 Action 或 Func 的方法,而我能想到的最好的方法是这样的:

必须有更好/更简单的方法来做到这一点,有什么想法吗?

0 投票
6 回答
5806 浏览

scheme - 初学者:Scheme 中的柯里化函数

我正在使用 SICP 讲座和文本来自己了解 Scheme。我正在看一个练习,上面写着“表达式 E 的应用程序是 (E E1,...En) 形式的表达式。这包括 n=0 的情况,对应于表达式 (E)。Curried 应用程序E 的应用要么是 E 的应用,要么是 E 的 Curried 应用的应用。”

(编辑:我更正了上面的引用......我最初错误地引用了定义。)

任务是定义计算为 3 的过程的 Curried 应用程序

我真的不明白这里的想法,阅读关于 Curriying 的维基百科条目并没有真正帮助。

任何人都可以帮助更清楚地解释这里的要求吗?

实际上,即使给我这个问题的答案也会有所帮助,因为在这个问题之后还有五个要解决。...我只是没有得到基本的想法。

补充:即使在布赖恩坎贝尔冗长的解释之后,我仍然有些迷茫。

(foo1 (sqrt 3)))认为是 foo 的应用程序,因此是 foo 的柯里化应用程序?

看起来太简单了,但也许...

输入(((foo1 2 )) 2)DrScheme 会出现以下错误(我有点预料到)

重新阅读什么是柯里化?我知道我也可以将 foo1 重新定义为:

那么我可以输入

12

但这并没有真正让我更接近于产生 3 作为输出,而且看起来这并不是真正对原始 foo1 进行柯里化,它只是重新定义它。

该死,20 年的 C 编程并没有让我为此做好准备。:-) :-)