问题标签 [partial-application]

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 回答
962 浏览

performance - Haskell 中是否很好地定义了部分或柯里化函数的性能?

在以下代码中:

偏函数是max,计算maxel吗?特别是,有人可以指出关于 Haskell 中偏函数复杂性的规则吗?编译器必须在上面的例子中只调用一次最大值吗?换句话说,部分函数是否保留了对内部 where 子句的先前调用的引用?

我有一些受 CPU 限制的代码执行不可接受,并且我正在寻找可能的错误,以推理复杂性。

0 投票
2 回答
379 浏览

haskell - Haskell 中的函数柯里化

我有一个功能:

示例操作系统用法:

我有两个问题。首先 - 为什么它不起作用:

我想得到 [2, 2]。

第二个问题。我试图创建 pariatl 函数。像这样的东西:

以这种方式使用它:

但我收到错误消息:

这里充满了可能的代码:

powerOf 返回 num 中 p 的最大幂。例如:100 = 2 * 2 * 5 *5,所以 powerOf 100 2 = 2。10 = 2 * 5,所以 powerOf 10 2 = 1。

如何修复错误?谢谢。

0 投票
2 回答
6546 浏览

javascript - JavaScript 咖喱函数

我以curry这种方式实现了一个功能:

当我使用上述功能执行以下操作时

它记录undefined。11 不是预期的输出吗?我的代码有什么问题?

注意:在函数console.log(x, y)内部使用addlogs 1 10。我不明白为什么它会返回undefined

0 投票
4 回答
1843 浏览

.net - curry 委托参数的最佳模式是什么(使用 .NET 2.0 或更高版本)?

有时,进行方法调用、完成参数并将其转换为 MethodInvoker 会很有用,该方法将使用这些参数调用指定的函数,而无需当时指定参数。在其他时候,做一些类似的事情很有用,但要保留一些参数。这种类型的动作称为“Currying”。在 VB 中执行此操作的最佳模式是什么?

在 VB 2010 中可以使用 lambda 表达式,但 lambda 表达式与 edit-and-continue 不兼容,并且它们创建的闭包可能具有意外的引用行为。另一种方法是定义一些通用方法,如下所示:

如果我想创建一个 MethodInvoker 来执行 Foo(5, "Hello"),我可以使用

如果我想将 MyAction(X) 变成 Boz(X, "George", 9),其中 X 是 Double,我可以使用

一切都非常漂亮,除了需要有大量的样板代码来容纳不同数量的固定和非固定参数,并且委托创建语法中没有任何内在的东西可以明确哪些参数是固定的,哪些是非固定的固定的。有没有办法改进模式?

附录:如果委托是从结构成员函数创建的,机制是什么?似乎委托获得了自己的结构副本,但我不知道该副本是装箱还是未装箱。如果没有装箱,用结构替换 CurryAction0 和 CurryAction1 将避免在创建委托时将 CurryAction0 或 CurryAction1 分配为单独的堆对象。但是,如果要装箱,则使用结构会增加将结构复制到装箱实例的开销,而不会保存任何内容。

0 投票
3 回答
576 浏览

scala - 在 scala 中使用部分应用函数的应用程序/优点是什么?

我们在 Scala 中部分应用了函数-

我想知道使用部分应用函数有什么好处。或者它只是一个句法添加?

0 投票
5 回答
29355 浏览

scala - 为什么 Scala 同时提供多个参数列表和每个列表的多个参数?

多个参数列表,例如def foo(a:Int)(b:Int) = {}每个列表的多个参数,例如,def foo(a:Int, b:Int) = {}据我所知,在语义上是等效的,并且大多数函数式语言只有一种声明多个参数的方式,例如 F#。

我能弄清楚支持这两种函数定义风格的唯一原因是允许使用只有一个参数的参数列表进行类似语法的语言扩展。

现在可以使用语法外观调用

但是,可以有其他方法来支持使用花括号,而无需多个参数列表。

一个相关的问题:为什么在 Scala 中使用多个参数列表称为“currying”?柯里化通常被定义为一种为了支持部分应用而使 n 元函数一元的技术。但是,在 Scala 中,可以部分应用一个函数,而无需制作该函数的“curried”(多个参数列表,每个参数列表,每个参数列表)版本。

0 投票
2 回答
7828 浏览

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

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

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

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

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

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

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

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

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

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

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

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

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

0 投票
1 回答
678 浏览

scala - 从scala中的部分应用函数获取参数

scala有没有办法从已经部分应用的函数中取回参数?

这是否有意义、应该完成或适合任何用例?

例子:

def doStuff(lower:Int,upper:Int,b:String)= for(turn <- lower to upper) println(turn +": "+b)

想象一下,有一次我知道“较低”的论点,并且我得到了一个将它应用到“doStuff”的函数

val lowerDoStuff = doStuff(3,_:Int,_:String)

有没有办法让我拿回那个3?(例如,假设我在一个只收到“lowerDoStuff”的函数中,现在需要知道第一个参数)

惯用的 scala 优于内省/反思(如果可能)。

0 投票
3 回答
268 浏览

scala - 是否可以获得部分应用函数的名称?

假设我定义了一个函数:

然后我定义了一个偏函数:

打印 p,显示:

没有显示函数名称。hello是否可以从部分函数中获取原始方法名称p

0 投票
3 回答
479 浏览

haskell - 部分应用程序在运行时如何表示?

当我map (1+) list在 Haskell 中编写类似的东西时,内部表示是(1+)什么?由于它是 的部分应用(+),因此必须将参数1保存在某个地方,但我无法理解这一点。有人可以给我一个简短的解释,如何实现柯里化和部分应用?