partial - 可以说柯里化(Currying)是部分应用的实现吗?

标签 partial currying

抱歉,如果这是旧事。我意识到这已经[之前讨论过]What is the difference between currying and partial application? 。我仍然希望对术语进行一些澄清。

可以公平地说,柯里化(Currying)启用了部分应用程序,并且在尚未柯里化(Currying)的函数上不可能实现部分应用程序吗?公平地说,在像 Haskell 这样自动支持部分应用程序的语言中,所有函数都是隐式柯里化(Currying)的吗?

最佳答案

柯里化(Currying)和部分应用都意味着一种语言支持高阶函数——也就是说,将函数作为数据传递——因为否则它们将毫无用处,并且使用高阶函数,柯里化(Currying)和部分应用都可以手动实现。

除了上述之外,它们是不同的想法。

你会说拥有 while循环“启用”forforeach循环?从某种意义上来说这是正确的,但它没有告诉您有关循环的任何有用信息。

部分应用正如其所言;您将函数应用于其某些参数,从而生成仅需要其余参数的专用版本。这可以通过或不柯里化(Currying)函数来完成,也许使用包装函数来处理参数,如 apply_foo_to_baz(baz) = ((bar, quux) => foo(bar, baz, quux)); ,请原谅我的伪代码。

柯里化(Currying)意味着转换采用多个参数的函数,如 foo1(bar, baz, quux);一次应用于一个参数,例如 foo2(bar)(baz)(quux); 。正在申请foo2从技术上讲,减少参数并不是部分应用,因为该函数只接受一个参数。知道foo2foo1 的柯里化(Currying)版本,我们可以想到foo2(bar)作为 foo1 的部分应用形式,但是一般来说,柯里化(Currying)函数不会使它们在给定任何特定数量的参数的情况下“部分应用”。

就 Haskell 而言,默认情况下,以通常方式定义的函数实际上是柯里化(Currying)的(这是合适的,因为两者都是以 the same person 命名的)。事实上,在不依赖实现细节的情况下有效地定义 Haskell 中“部分应用程序”的含义实际上有点棘手。

关于partial - 可以说柯里化(Currying)是部分应用的实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12920948/

相关文章:

c - 我将如何使用 fread() 进行部分读取,并在此处获得预期的输出?

json - 这是使用 Golang 忽略来自 PUT/PATCH 的 JSON 负载中不需要的字段的最佳方法吗?

excel - 在 Excel 中求偏导数

scala - 如何在 scala 中使用泛型创建部分函数?

haskell - 找到一个定理的计算解释

list - Haskell:使用(柯里和)计算列表的长度

ruby-on-rails - Rails 中的即时搜索引擎

c# - 如何在 EntityFramework Core 中使用部分类和部分 OnModelCreating 方法扩展 DbContext

javascript - 在柯里化(Currying)中,为什么外部的启动函数看起来是最内部的函数?

javascript - 使用柯里化(Currying)技术的返回语句