我正在研究函数式编程和 lambda 演算,但我想知道 Church 的原始作品中是否也出现了闭包术语,或者它是一个与编程语言严格相关的更现代的术语。
我记得在教会的工作中有这样的术语:自由变量、封闭到……等等。
我正在研究函数式编程和 lambda 演算,但我想知道 Church 的原始作品中是否也出现了闭包术语,或者它是一个与编程语言严格相关的更现代的术语。
我记得在教会的工作中有这样的术语:自由变量、封闭到……等等。
这是一个更现代的术语,由于(正如现代 FP 中的许多东西一样),PJ Landin (1964),表达式的机械评估
此外,我们通过一组称为“闭包”的信息来表示 λ 表达式的值,该信息包括 λ 表达式和评估它的相关环境。
考虑 Scheme 中的以下函数定义:
(define (adder a)
(lambda (x) (+ a x)))
在纯 lambda 演算中不需要显式闭包的概念,因为变量替换会处理它。上面的代码片段可以翻译
λa λx . (a + x)
当您将此应用于值z
时,它变为
λx . (z + x)
通过β-还原,这涉及替换。a
如果你愿意,你可以调用这个闭包。
(该示例使用函数参数,但这适用于任何变量绑定,因为在纯 lambda 演算中,所有变量绑定都必须通过 λ 项发生。)