Scheme中的闭包与其他语言中的常规闭包有什么区别?

yua*_*ili 6 scheme closures functional-programming sicp

我正在学习SICP。而且我发现的定义在SICP是(也许)从其他语言的闭包定义不同。

这是SICP所说的:

创建元素为对的对的能力是列表结构作为表示工具的重要性的本质。我们将此功能称为cons的闭包属性。通常,如果可以使用相同的操作将事物与该对象合并的结果本身进行合并,则用于合并数据对象的操作将满足闭包属性。

我认为这里的闭包更接近于数学中的闭包,而不是我在JavaScript中看到的闭包,这意味着函数可以访问封闭的环境变量。

我错了吗?

Joh*_*nts 7

你是对的; 本文不是指“闭包”(一种确保函数即值正确引用词法绑定的实现策略),而是更笼统地说是“闭包”的数学概念,例如语句“整数” 在加法操作中关闭 ”。即:将运算应用于集合的任何两个元素都会产生仍然是集合成员的结果。


ben*_*ers 6

SICP中使用“闭包”与通常在计算中使用的方式有所不同。从SICP第2章的脚注6:

这里使用“闭包”一词来自抽象代数,如果将运算应用于集合中的元素而产生的元素又是集合中的元素,则该元素集在一个运算下被称为闭合。Lisp社区(不幸的是)也使用“闭包”一词来描述一个完全不相关的概念:闭包是一种用于表示具有自由变量的过程的实现技术。在本书的第二种意义上,我们不使用“关闭”一词。

另一方面,Schemer使用“闭包”来指代词法闭包,就像程序员将其他语言与词法闭包一起使用一样。