文章
Get Programming with Haskell-5
闭包(closures)和部分应用(partial application)
部分内容超过 Notion API 单页读取上限,已尽力加载可访问内容。
# 1、CLOSURES AND PARTIAL APPLICATION
## 1、Closures—creating functions with functions
在上一节中我们抽象了如下函数
```haskell
ifEvenInc n = ifEven inc n
ifEvenDouble n = ifEven double n
ifEvenSquare n = ifEven square n
```
虽然使用**函数作为参数**有助于简化代码,但你会发现仍然存在**重复的编程模式**!除了传递给 **`ifEven`** 的函数不同外,这些定义几乎完全相同。此时,你需要一个能够自动生成
**`ifEvenX`** 系列函数的工具。为此,可以创建一个**返回函数的新函数**,命名为 **`genIfEven`**(生成偶判断函数),其逻辑如下图所示。

现在,你正在传入一个函数并返回一个 lambda 函数。传入的函数f会在 lambda 函数内部被捕获!当你在 lambda 函数中捕获一个值时,这便称为**闭包**。
即使在这个简单的示例中,要完全理解其内部机制也可能有一定难度。为了更好地观察这一过程,我们来看看如何通过genIfEven创建ifEvenInc函数。
