部分应用和柯里化的概念在 Haskell 中可以互换吗?

haw*_*eye 1 haskell currying partial-application

在一些函数式语言中,部分应用函数和柯里化函数是两个相似但不同的概念。

阅读《Learn You a Haskell for Great Good》一书,作者似乎可以互换应用这些。

【Curried 函数】 Haskell 中的每个函数官方都只带一个参数。

...

如果我们调用一个参数太少的函数,我们会得到一个部分应用的函数,这意味着一个函数的参数与我们省略的参数一样多。

我的问题是:Haskell 中部分应用和柯里化的概念可以互换吗?

ama*_*loy 5

它们是不同但相关的概念。因为函数定义是柯里化的,所以当你部分应用一个函数时(即,调用它的参数比它预期的要少),你会得到另一个需要更少参数的函数。

柯里化的过程是用 N 个一元函数的“层”替换一个 N 元函数,这样你就可以部分应用它,转动

function(x,y) {return x+y;}
Run Code Online (Sandbox Code Playgroud)

进入

function(x) {return function(y) {return x+y;};}
Run Code Online (Sandbox Code Playgroud)

柯里化是定义函数的一部分,部分应用是调用函数时对函数执行的操作。