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

时间:2015-04-27 23:38:44

标签: functional-programming scheme closures sicp

我现在正在学习SICP。我发现SICP中 closure 的定义(可能)与其他语言中的闭包定义不同。

这是SICP所说的:

  

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

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

我错了吗?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

使用"关闭"在 SICP 中,它通常用于计算。来自 SICP 第2章,footnote 6:

  

使用'关闭'这里来自抽象代数,   如果一个元素据说在一个操作下被关闭了   将操作应用于集合中的元素会生成一个元素   又是集合的一个元素。 Lisp社区也   (不幸的是)使用了“封闭”这个词。完全描述   不相关的概念:闭包是一种实现技术   用自由变量表示程序。我们不使用这个词   '闭合'在本书的第二种意义上。

另一方面,Schemer使用"关闭"引用lexical closures就像使用其他语言的程序员一样使用词法闭包。