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

scala - Scala 中的两种柯里化方式;每个的用例是什么?

我在我维护的 Scala 样式指南中讨论了多个参数列表。我开始意识到有两种方式currying,我想知道用例是什么:

样式指南错误地暗示它们是相同的,而它们显然不是。该指南试图说明创建的柯里化函数,虽然第二种形式不是“按书本”柯里化,但它仍然与第一种形式非常相似(尽管可以说更容易使用,因为你不需要_) _

从那些使用这些表格的人那里,关于何时使用一种表格而不是另一种表格的共识是什么?

0 投票
2 回答
575 浏览

scala - Partial function application prematurely runs codeblock when used with underscore

Given:

I can call it with:

Here's the curious behaviour with partial application:

The codeblock is evaluated immediately without being passed in as a function. What is the difference between the above 2 statements?

0 投票
2 回答
1671 浏览

recursion - SML 柯里化问题

下周我有一个期中考试,我刚刚复习了课堂上提供的 sml 笔记。我遇到了一个 currying 的例子,但我不确定它是如何工作的。

这是一个计算数字幂的简单函数。这是函数定义:

当我们向它传递以下参数时,我不确定这个函数是如何工作的:

这是我的看法:

我们应该得到的结果是四,但我看不出我们是如何从我上面执行的步骤中得到这个结果的。

请帮忙。谢谢你。

0 投票
2 回答
468 浏览

programming-languages - 部分评估和柯里化

我已经开始理解一些与柯里化相关的例子,但我仍然对柯里化的概念感到不满意。我知道柯里化可用于进行部分评估,但我不确定它在某些情况下如何工作。

我知道它在下面的示例中是如何工作的:

所以假设我们只为 x 传递一个参数,那么它等价于以下内容:

最终返回

现在,我正在尝试将这个想法应用于内置函数foldl

我知道它的代码是:

我的问题是,如果我们不将所有参数传递给foldl(即我们只传递第一个参数,即函数('a*'b->'b))怎么办。在我给出的第一个例子中,当只有一个参数被传递给它时,很容易看到函数是如何工作的。foldl但是,当只有一个参数传递给它时,我很难看到它是如何工作的。

帮助。

0 投票
2 回答
1126 浏览

sml - SML 中的函数类型

谁能向我解释为什么下面给出的函数类型是
('a * 'b -> 'b) -> 'b -> 'a list -> 'b

功能是:

当我查看这个函数时,我发现类型应该只是,('a * 'b -> 'b) -> 'b因为我们有一个函数f接收一个元组并返回 at'b并且在基本情况下我们返回'b.

0 投票
1 回答
500 浏览

lambda - 柯里化只是“可选参数”?

我在网上读到一个人的声明说“currying 只是一种具有可选参数的奇特方式”。凭直觉,我觉得这种说法很肤浅和错误,但我不能真正指出它,可能是因为我对 lambda 演算没有足够的知识。

当我试图解释差异时,我的解释跨越了段落,主要归结为“Currying 是函数声明的所有变体都具有较少数量的参数作为类型。但是你不能将带有可选参数的函数的所有组合作为有效类型和在其他声明中使用它们,至少不会自动使用”。

我的方法一开始是正确的吗?更重要的是,有没有一种更简单、更简单的方式来解释它?

0 投票
3 回答
35198 浏览

function - 在 Scala 中定义函数的两种方式。有什么不同?

这是一个小的 Scala 会话,它定义并尝试了一些函数:

效果很好。

哎呀。

效果很好!

现在,我已经看到了_折叠 (_ + _等) 时的语法。所以据我了解,它_基本上意味着“争论”。所以test1 _基本上意味着一个带有参数的函数,它被赋予“。但是为什么这与 justtest1完全相同test1?如果我附加一个为什么会有区别_

于是我不断探索...

在这里它没有_defed 函数和ed 函数有什么区别val

0 投票
2 回答
211 浏览

function - 柯里化一个函数以获得另一个函数:unit -> 'a

给定一个高阶函数,如下所示:

还有另一个功能:

有没有办法在不使用 lambda:的情况下传递incr给?call(fun () -> incr 1)

显然,传递(incr 1)不起作用,因为该功能随后“完全应用”。

编辑

澄清一下:我想知道是否有办法对函数进行柯里化,使其成为函数:unit -> 'a.

0 投票
1 回答
1828 浏览

scala - 带柯里化的默认参数

我可以将函数定义为:

我可以这样称呼它:

如果我咖喱上面:

我不能用 1 个参数调用它:

我必须提供这两个参数。有没有办法解决这个问题?

0 投票
2 回答
7828 浏览

python - 在 Python 中,部分函数应用(currying)与显式函数定义

在 Python 中,是否认为更好的风格是:

  • 根据更一般的,可能是内部使用的功能,明确定义有用的功能;或者,
  • 使用部分函数应用程序来显式描述函数柯里化?

我将通过一个人为的例子来解释我的问题。

假设编写了一个函数 _sort_by_scoring,它接受两个参数:一个评分函数和一个项目列表。它根据每个项目在原始列表中的位置返回按分数排序的原始列表的副本。还提供了两个示例评分函数。

_sort_by_score 函数永远不会被直接调用;相反,它由其他单参数函数调用,这些函数将评分函数及其唯一参数(项目列表)传递给 _sort_by_scoring 并返回结果。

显然,这个意图在函数柯里化方面更好地表达了。

用法(在任何一种情况下):

显式函数定义风格的明显优势:

  1. 可以在更通用的函数之前定义有用的函数,而不会引发 NameErrors;
  2. 辅助函数(例如,评分函数)可以在函数定义体中定义;
  3. 可能更容易调试;
  4. 代码看起来不错,因为“显式优于隐式”。

柯里化函数定义风格的明显优势:

  1. 惯用地表达函数式编程的意图;
  2. 由于简洁,代码看起来不错。

对于定义“有用”的功能,两种风格中的哪一种更受欢迎?还有其他更惯用/ Pythonic /等的样式吗?