编译原理、离散数学中闭包是什么意思
发布网友
发布时间:2022-04-19 01:01
我来回答
共4个回答
懂视网
时间:2022-04-19 05:23
如果一个集合中的每个元素执行某个运算还是这个集合的元素,那么说该集合在这个运算下
闭合。
闭包的定义是,
包含指定集合的满足在某个运算下
闭合的
最小集合。
说白了,闭包就是,添加最少的元素,使得集合在某个运算下闭合。抽象之,
闭包是指添加东西使得某种性质成立。
那么程序设计语言里面的闭包又是什么呢?函数使用函数外的变量,如若使用的函数外的变量不是全局变量,将自动创建
闭包,令内部函数所使用的变量与函数一同存在,
使得该函数有效。
也就是说
闭包就是自动为这个函数添加一个隐形的参数,其值为使用的外部变量,并确保其与函数一同存在,使得函数有效。
简单的说,这两个概念几乎没有联系(也许有,但是我没有发现)。我简单的解释一下两个闭包在两个领域中的含义:
1,在离散数学(具体的说是抽象代数)里,如果对一个集合中的每个元素执行某个运算操作,得到的结果还是这个集合的元素,那么就说该集合在这个运算操作下构成闭包。例如,整数集合在减法运算下构成闭包;但是自然数在减法运算下不构成闭包。
2,在编程语言里,也称为词法闭包或者函数闭包,它表示的是一个函数,以及一个定义这个函数时的环境(环境里记录了非本地变量的值)。例如(横线是为了对齐):
def counter():
----x = 0
----def increment(y):
--------nonlocal x
--------x += y
--------print(x)
----return increment
这个例子用的是python 3.X的语法,一直觉得python的闭包的实现不美观,不如lisp、ruby等。
参考自:
1,http://en.wikipedia.org/wiki/Closure_(computer_science)
2,http://en.wikipedia.org/wiki/Closure_(mathematics)
关于离散数学中的闭包
1.@Ivony的说法和我学校采用的课本的说法是一样的,“包含指定集合的满足在某个运算下闭合的最小集合”,即闭包是满足特定条件的集合。
2.另一种说法来自维基,即如果集合A在某种操作作用下的结果仍然属于集合A,那么就认为集合A在这个操作下拥有闭包属性。也可以说,集合A在这个操作下是闭合的。
在第一种说法里,闭包和闭合不是同一含义。而在第二种说法里闭包和闭合仅仅是名词和形容词的区别。
关于程序语言中的闭包
又叫词法闭包,或者函数闭包,指的是程序语言中的特性,具备该特性的程序语言能将函数和函数所处的环境当做整体使用。有时也把这个整体叫做闭包。
建议以后把闭包和函数闭包区别开来使用,否则会产生误解。
我不想提这个问题,只是,离散说的闭包和函数闭包是一样的,可以认为是等价命题
热心网友
时间:2022-04-19 02:31
数学中是闭的集合,也就是集合和它的边界的并。集合e的全体聚点并上e称为e的闭包。关系的闭包运算时关系上的一元运算,它把给出的关系R扩充成一新关系R’,使R’具有一定的性质,且所进行的扩充又是最“节约”的。
比如自反闭包,相当于把关系R对角线上的元素全改成1,其他元素不变,这样得到的R’是自反的,且是改动次数最少的,即是最“节约”的。
热心网友
时间:2022-04-19 03:49
集合E的全体聚点并上E称为E的闭包。
热心网友
时间:2022-04-19 05:23
数学中是闭的集合,也就是集合和它的边界的并.