Functional programming 函数规划与闭包

Functional programming 函数规划与闭包,functional-programming,closures,lambda-calculus,Functional Programming,Closures,Lambda Calculus,我在学习函数编程和lambda微积分,但我想知道 如果结束语也出现在教堂的原作中,或者是一个更现代的词 与编程语言密切相关的术语 我记得在教会的工作中有这样的术语:自由变量,封闭成。。。, 等等。这是一个更现代的术语,因为现代FP中有很多东西,p.J.Landin 1964 此外,我们还用a表示λ-表达式的值 一组称为闭包的信息,包括 λ-表达式和与之相关的环境 对其进行了评估 这是一个更现代的术语,因为现代FP中有很多东西,p.J.Landin 1964 此外,我们还用a表示λ-表达式的值 一

我在学习函数编程和lambda微积分,但我想知道 如果结束语也出现在教堂的原作中,或者是一个更现代的词 与编程语言密切相关的术语

我记得在教会的工作中有这样的术语:自由变量,封闭成。。。,
等等。

这是一个更现代的术语,因为现代FP中有很多东西,p.J.Landin 1964

此外,我们还用a表示λ-表达式的值 一组称为闭包的信息,包括 λ-表达式和与之相关的环境 对其进行了评估


这是一个更现代的术语,因为现代FP中有很多东西,p.J.Landin 1964

此外,我们还用a表示λ-表达式的值 一组称为闭包的信息,包括 λ-表达式和与之相关的环境 对其进行了评估


在Scheme中考虑以下函数定义:

(define (adder a)
  (lambda (x) (+ a x)))
在纯lambda演算中不需要显式闭包的概念,因为变量替换处理它。上面的代码片段可以翻译

λa λx . (a + x)
将此值应用于值z时,它将变为

λx . (z + x)
通过β-还原,这涉及到取代。如果你愿意,你可以把这个闭包称为a


该示例使用函数参数,但这适用于任何变量绑定,因为在纯lambda演算中,所有变量绑定都必须通过λ项进行。

考虑Scheme中的以下函数定义:

(define (adder a)
  (lambda (x) (+ a x)))
在纯lambda演算中不需要显式闭包的概念,因为变量替换处理它。上面的代码片段可以翻译

λa λx . (a + x)
将此值应用于值z时,它将变为

λx . (z + x)
通过β-还原,这涉及到取代。如果你愿意,你可以把这个闭包称为a


该示例使用函数参数,但这对任何变量绑定都适用,因为在纯lambda演算中,所有变量绑定都必须通过λ项进行。

因此在Church的工作中,lambda表达式在其自由变量上是闭合的,但在该工作中没有明确说明闭合项@实际上,xdevel2000不是在其自由变量上,而是在由λ抽象约束的变量上。类似地,在Scheme等编程语言中,闭包不会发生在自由变量上:在定义加法器x+a x(其中a尚未定义)之后,定义a 2会更改加法器的行为。当然,并不是所有的编程语言都允许这样做。因此,在Church的工作中,lambda表达式在其自由变量上是封闭的,但在该工作中没有明确说明封闭项@实际上,xdevel2000不是在其自由变量上,而是在由λ抽象约束的变量上。类似地,在Scheme等编程语言中,闭包不会发生在自由变量上:在定义加法器x+a x(其中a尚未定义)之后,定义a 2会更改加法器的行为。当然,并非所有编程语言都允许这种情况。