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

haskell - 使用currying的参数排序

我最近两次重构代码以更改参数的顺序,因为有太多的代码喜欢flip\x -> foo bar x 42正在发生黑客攻击。

在设计函数签名时,哪些原则可以帮助我充分利用柯里化?

0 投票
3 回答
1524 浏览

f# - 将使用 2 个序列的 Seq.map 应用于采用 2 个参数的方法

我正在编写一个快速的 DB 性能测试,并选择了 F#,这样我可以得到更多的练习。

我创建了一个方法,measureSelectTimes它具有签名Guid list * Guid list -> IDbCommand -> TimeSpan * TimeSpan

然后,我称之为:

我已经用类型明确地注释了以澄清。

我想不通的是如何在measureSelectTimes没有 lambda 的情况下调用。我想像这样部分应用ids它:ids |> Seq.map measureSelectTimes但是我不知道如何处理生成的部分应用函数然后映射到cmds. 这个的语法是什么?

0 投票
17 回答
36869 浏览

java - Java 支持柯里化吗?

我想知道是否有任何方法可以在 Java 中提取它。我认为如果没有对闭包的本机支持,这是不可能的。

0 投票
1 回答
136 浏览

functional-programming - 这种类似部分应用程序的函数式编程技术有名称吗?

我有一个f: (a, b, c = 5, d = 0) -> {...}需要 2 到 4 个参数的函数。

我想传递这个函数的“绑定”版本,它总是对最后一个参数使用默认值,但对前两个参数使用特定值(比如 1 和 2)。也就是说,我想要g: () -> f(1, 2).

如果我要进行部分应用,我会得到g': (c = 5, d = 0) -> f(1, 2, c, d). 也就是说,部分应用不会强制执行g我想要的零参数性质,而是给我g'它需要 0 到 2 个参数。

g如果有的话,从被调用中获取的技术是f什么?

0 投票
5 回答
1023 浏览

haskell - 任何人都知道如何使用部分应用的三参数函数中缀(haskell)

我想根据布尔值(参数之一)以不同的方式应用 3 个参数函数。

我希望能够以中缀方式应用它,以便我可以链接它(下面的示例)。类似于以下内容,但实际上有效。

我需要将 Bool 作为第二个变量吗?或者是其他东西?我有点迷路了。

PS我想这样做的原因是有可选的附加功能

0 投票
2 回答
157 浏览

javascript - 如何在 JavaScript 中部分应用成员函数?

我目前有一个部分应用程序功能,如下所示:

问题是它只适用于非成员函数,例如:

如何改写 curry 函数以应用于成员函数,如:

0 投票
3 回答
11566 浏览

function - 我什么时候必须将我的方法视为 Scala 中的部分应用函数?

我注意到,当我使用期望其他函数作为参数的函数时,有时我可以这样做:

但其他时候,编译器给我一个错误,告诉我应该写一个这样的函数,以便它把它当作一个部分应用的函数:

例如,如果我有这个:

为什么我不能有如下代码:

在什么情况下编译器会告诉我添加_

0 投票
4 回答
2702 浏览

haskell - 部分应用从左到右

我昨天从 haskell 开始,仍然完全迷失在这个勇敢的新世界的岸边。现在我遇到了以下问题:

假设我有一些函数对整数和另一个变量有一些魔力:

现在我想将此函数应用于列表的所有元素。到目前为止没问题,因为映射也是你在 python 中的日常面包和黄油(我来自哪里)。

据我了解,二元函数 makeTuple 部分与整数 n 一起应用,因此成为一个可以映射到 x 的每个元素的一元函数。到目前为止,一切都很好。

但是当 makeTuple 函数有另一个签名时我该怎么办,比如:

通向罗马的方式很多:效果相同,但方式不同。现在显然映射不再起作用了:该函数需要一个 Int 并得到一个 a。

这是意料之中的。我的-也许太pythonic-解决方法是使用另一个函数将参数传递到它们应该去的地方:

问题: 当部分应用的参数不是最左边时,首选的函数式、haskell 风格的部分应用函数的方式是什么?

0 投票
4 回答
8978 浏览

scala - Scala中的多个参数列表和每个列表的多个参数有什么区别?

在 Scala 中,可以编写(咖喱?)这样的函数

curriedFunc上述带有两个参数列表的函数定义与在单个参数列表中带有多个参数的函数有什么区别:

从数学的角度来看,这是(curriedFunc(x))(y)curriedFunc(x,y)但我可以写def sum(x) (y) = x + y,同样会是def sum2(x, y) = x + y

我只知道一个区别 - 这是部分应用的功能。但两种方式对我来说都是等价的。

还有其他区别吗?

0 投票
1 回答
62 浏览

functional-programming - 术语:未绑定参数是函数的部分应用?

...部分应用(或部分函数应用)是指将多个参数固定到函数的过程,从而产生另一个较小的函数。

我想知道以下是否有特定名称:(伪代码!

在函数式编程中有这个名字吗?或者它只是部分应用程序,其中未绑定的参数恰好是一个函数