问题标签 [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 投票
4 回答
4992 浏览

scala - 如何在 Scala 中从 a => b => c 获得 (a, b) => c?

如果我有:

这是以下的简写:

如何获得g带有签名的函数:

(IE)

方面f

0 投票
2 回答
1053 浏览

scala - 为什么 scala 中不包含currying 和 uncurrying

如果我有一个功能:

我可以定义一个隐式转换,以便可以在需要函数(A, B) => C的地方使用它。这也朝着另一个方向发展。

为什么这些转换不是隐式的(或隐式可用的)?我假设坏事可能会因某些价值的坏事而发生。这是什么价值?

0 投票
1 回答
235 浏览

javascript - 在 YUI3 库中进行柯里化

YUI3 库有柯里化功能吗?

0 投票
4 回答
661 浏览

c# - 需要帮助理解 lambda (currying)

我正在阅读 Accelerated C# 我不太了解以下代码:

在最后一行 x 指的是什么?还有另一个:

我如何评价这个?(y) => (x) => func( x, y )什么在哪里传递......它确实令人困惑。

0 投票
1 回答
461 浏览

macros - 使用语法规则在 Scheme 中进行隐式柯里化?

Jeffrey Meunier这里有一个隐式的 Curry 宏,它使用 defmacro。我想知道是否有人用语法规则写过这个?

0 投票
6 回答
12612 浏览

haskell - 将列表元素作为参数传递给柯里化函数

这里仍然是 Haskell 新手。我知道足以让自己陷入错误假设的麻烦。如果我有以下功能...

我想要一个可以接受列表的函数,将每个元素用作指定函数中的参数,例如quadsum,并返回一个柯里化函数供以后使用。

我一直在尝试一些效果...

希望能够做到这一点...

获得像...这样的咖喱函数:

或者,或者,调用:

导致...

这可能吗?我被误导到什么程度?

0 投票
4 回答
2987 浏览

haskell - 在 Haskell 中乱码

在 Haskell 中,是否有一个优雅的符号来对函数的参数进行乱序处理?

例如,如果你想用 2 除以列表的所有元素,你可以写

但是,要划分列表的所有元素,您似乎需要定义一个匿名函数

在更复杂的情况下,匿名函数很快就会变得笨拙。我知道在这种情况下 map ((*) 0.5) [1,2,3,4,5] 可以正常工作,但我很想知道 Haskell 是否有更优雅的方法来对函数的参数进行柯里化乱序?

0 投票
3 回答
2030 浏览

haskell - Haskell - 柯里化?需要进一步解释

所以像

为什么这行得通?咖喱部分。为什么没有变量?

0 投票
3 回答
5823 浏览

scala - Scala:咖喱构造函数

我有以下 Scala 类:

我想将 Person 构造函数用作柯里化函数:

这行得通,但是还有另一种方法可以做到这一点吗?这种方法似乎有点乏味且容易出错。我可以想象像 Function.curried 之类的东西,但是对于构造函数。

0 投票
3 回答
5897 浏览

haskell - Haskell 函数应用和柯里化

我总是对学习新语言感兴趣,这一事实让我保持警觉,并使我(我相信)成为一个更好的程序员。我征服 Haskell 的尝试来来去去——到目前为止已经两次——我决定是时候再试一次了。第三次是魅力,对吧?

没有。我重新阅读了我的旧笔记......并感到失望:-(

上次让我失去信心的问题是一个简单的问题:整数的排列。即从整数列表到列表列表 - 它们的排列列表:

这实际上是一个通用问题,因此将上面的 'int' 替换为 'a' 仍然适用。

从我的笔记中:

我自己先编码,我成功了。欢呼!

我把我的解决方案发给了我的一个好朋友——Haskell 大师,它通常有助于向大师学习——他给我发了这个,有人告诉我,“表达了语言的真正力量,使用通用工具来编写你的代码需要”。为了它,我最近喝了kool-aid,走吧:

唔。让我们分解一下:

好的,到目前为止,一切都很好。我花了一分钟来理解“ins”的第二行,但是好的:它将第一个 arg 放在列表中所有可能的位置。凉爽的。

现在,要了解 foldr 和 concatMap。在“Real world Haskell”中,DOT 被解释了......

...作为...的另一种语法

在大师发送的代码中,DOT 是从一个 foldr 中使用的,“ins”函数作为折叠“collapse”:

好的,既然我想了解大师是如何使用DOT的,我尝试根据DOT定义的等效表达式,(f . g) x = f (gx) ...

什么!?!为什么?好的,我检查了concatMap的签名,发现它需要一个lambda和一个列表,但这只是人的想法;GHC如何应对?根据上面DOT的定义...

...我所做的是有效的,替换明智的:

挠头...

所以... DOT 的解释显然太简单了... DOT 必须足够聪明才能理解我们实际上希望“ins”被柯里化并“吃掉”第一个参数 - 因此成为一个函数想要对 [t] 进行操作(并在所有可能的位置上“穿插”它们)。

但是这是在哪里指定的?当我们调用时,GHC 是如何知道这样做的:

“ins”签名是否以某种方式传达了这个……“吃掉我的第一个论点”政策?

我看不出有什么特别的——“ins”是一个函数,它接受一个“t”,一个“t”列表,然后继续创建一个包含所有“interspersals”的列表。没有什么关于“吃掉你的第一个论点并把它赶走”。

所以那里......我很困惑。我明白(看了一个小时的代码之后!)发生了什么,但是......上帝全能......也许 GHC 试图看看它可以“剥离”多少个参数?

再次 - 哎呀...

而且由于我总是将我正在学习的语言与我已经知道的语言进行比较,那么“ins”在 Python 中的外观如何?

老实说,现在……哪个更简单?

我的意思是,我知道我是 Haskell 的新手,但我觉得自己像个白痴……看了 4 行代码一个小时,最终假设编译器……尝试各种解释,直到找到“点击”?

引用致命武器的话,“我对这个太老了”......