您的位置:首页 > 其它

浅论函数式语言的环境,兼谈闭包

2010-05-03 22:46 232 查看
函数式语言与命令式语言的一个根本不同,就是下面这个两个数交换的例子居然是正确的:

a=1
b=2
a,b=b,a
print a ,b

输出2 1

究其原因,是环境造成的。什么是环境呢?通俗点讲,你可以将环境看成是一个栈,栈单元的内容就是各个变量的值。可见,上述a和b赋值时的环境均是a=1,b=2。再看一个lisp的例子:

设环境r为 r=( (X.(A B)) (Y.(C D)))

则μr((EXPR (X Y) (CONS X Y)) (CDR Y) (CAR X))

=μr1 (CONS X Y)

其中r1=( (X.(D)) (Y .A) (X .(A B)) (Y . (C D)))

可见列表求值跟上述赋值的结果是一样的,环境决定了自变量的值。

而闭包,则是打包了环境,相当于内部函数是在外层函数的环境下运行的。因此,又有人称JavaScript中的闭包是没有释放的资源(若释放了相关资源,调用内部函数就无法得到正确结果了)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: