闭包:-数学概念与函数式编程概念.docx

闭包:-数学概念与函数式编程概念.docx

ID:59502550

大小:14.53 KB

页数:5页

时间:2020-11-03

闭包:-数学概念与函数式编程概念.docx_第1页
闭包:-数学概念与函数式编程概念.docx_第2页
闭包:-数学概念与函数式编程概念.docx_第3页
闭包:-数学概念与函数式编程概念.docx_第4页
闭包:-数学概念与函数式编程概念.docx_第5页
资源描述:

《闭包:-数学概念与函数式编程概念.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、闭包:数学概念与函数式编程概念 搜索下“闭包”这个词,会发现网上关于闭包的文章已经不计其数,甚至很多人将闭包看做面试javascript程序员的必考题(虽然闭包和javascript没有什么必然联系)。虽然网上关于闭包的文章甚多,但是很少以较为形式化的角度阐述闭包,而从一个比较形式化角度理解其涵义对其的理解是非常重要的。大多数文章将闭包的概念与javascript语言绑定太死,这样容易局限对闭包概念的理解,而难以窥探到其本质。从javascript去理解闭包,难以了解其本质意义。在这里我们试图先理解纯粹意义上的闭包,然后再理解javascript中的闭包机制。  基于以上情况,本

2、文将从较为形式化的角度阐述闭包概念,当做对现有资料的一个补充。  一个需要明确的重要事实  在开始阐述闭包之前,我需要特别明确一个非常重要的事实,那就是“闭包(closure)”一词被用于定义两个毫不相关的概念,分别是数学领域抽象代数分支下用于描述集合之于运算的一种性质以及计算机科学程序设计语言分支用于描述函数式语言所支持的一种机制。这种不同大约就如“电影《人猿泰山》”和“五岳之尊泰山”中的“泰山”差不多,两个短语中的“泰山”描述的是两个风马牛不相及的概念,虽然是同一个词。  一般来说,作为程序员我们说的闭包更多是指后者,但是如果你与我一样同时具有一点数学背景,第一次接触“闭包”

3、一词是在抽象数学中的话,那么当刚接触到计算机中的“闭包”时多少会产生困惑,同样,如果你是一个纯粹的程序员,那么当在数学著作中读到“闭包”一词时请小心区分这个“闭包”具体是表述哪一个概念。  我会在下文中分别阐述数学领域和计算机科学领域闭包的概念。代数学中的闭包  抽象代数是一门研究代数结构的数学分支,它的研究对象包括群、环、域和向量空间等等。当然我在这里丝毫没有要大谈特谈这些令人头大的概念的意思,我会尽量以一种易懂的半形式化方式去阐述一些概念。  集合的定义  非正式地,集合是N个对象组成的一个无序、互异且确定的整体。其中N是自然数。这些对象称为集合的元素。  无序性是指集合中的

4、元素不存在序关系(集合上可以定义序关系,但这些序关系不是集合本身的一部分),每个元素的地位是相同的。  互异性是指集合中任意两个元素是不同的,即同一集合中任意两个元素间不存在等价关系。  确定是指对任意一个对象和任意一个集合,这个对象要么属于此集合,要么不属于此集合,二者必居其一,不存在模棱两可的状态。  运算的定义  非正式地,集合上的n元运算是一个映射,这个映射将作用于任意n个集合中的元素,并映射为一个结果(注意结果不一定属于这个集合)。  例如,设N+是正整数集合,那么加法(+)和减法(?)都可以看做定义在N+上的二元运算,因为任意两个正整数都可以进行加减。  封闭的定义 

5、 有了集合和运算的概念,就可以定义封闭的概念了。  非正式地,如果定义于集合A上的运算⊕的运算结果仍然属于A,那么运算⊕对于集合A是封闭的。下面给出“封闭”的一个半形式化定义:  如果对于任意a1,a2∈A,有a1⊕a2∈A,那么说二元运算⊕对于集合A是封闭的。  例如“+”对于N+是封闭的,因为任意两个正整数的和结果仍然是正整数;但是“?”对于N+不是封闭的,例如3和5属于N+,但是:3?5=?2?N+。  闭包性质  一个集合满足闭包性质当且仅当这个集合在某个运算或某些运算的搜集下是封闭的,其中“某些运算的搜集下封闭”是指这个集合单独闭合在每个运算之下。。    一个例子  

6、  -存在于形式语言与自动机理论中的闭包  上面说了很多东西,我们来看一个抽象代数领域闭包的例子。  我们回想在形式语言与自动机理论中(或者编译原理中也有提到)在定义语言时做的一些推导。  一般我们会先定义一个有限集合Σ,叫做字母表,Σ的n阶幂运算定义为形成一个新的集合Σn,一个对象属于Σn当且仅当它是Σ中任意n个字母连接成的串,其中Σ0={ε}。而  Σ?=Σ0∪Σ1∪...∪Σn∪...  此时集合Σ?满足闭包性质,因为这个集合对于幂运算是封闭的。有兴趣的读者可以自行证明一下。函数式编程中的闭包  在这一章节开始之前,我需要再和大家明确一个比较纠结的事实,就是在函数式编程领域

7、中当说到“闭包”时,也有可能是指数学领域中闭包的概念,这是因为函数式编程在基础理论与抽象代数有一定亲缘性,所以当在函数式语言著作中讨论“闭包”时,有可能是在抽象数学的上下文中讨论的。然而,在表述上可能会有微妙变化。在函数式语言领域对于数学闭包常用的表述是“如果一个运算的结果仍然能被此运算作用,则这个运算是封闭的”,要注意这只不过是上文提到的“闭包”概念的另一种等价表述而已,如果我们将这个运算的所有结果看做一个集合,那么就可以等价表述说这个运算在这个集合上是封闭的。而我下面所要阐述

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。