The Way 2 Inner Peace.

丘奇数
闭包

静态作用域与动态作用域

Qians posted @ 2012年12月01日 21:46 in scheme with tags Scheme , 2136 阅读

有如下一段scheme代码:

(define (f1 x) (f2 4))
(define (f2 y) (+ x y))
 
(f1 3)

若在一个为动态作用域的实现中,其结果是7,而在静态作用域的实现中,结果是错误.

动态作用域(dynamic scope)中,环境(environment)随着程序的运行而增长.这样的结果就是一个"变量"?(identifier)是否在环境中是否有值取决于它是否被执行过.

静态作用域(static scope),也叫词法作用域(lexical scope),词法是指"函数定义时的作用域",静态则是值"不随执行(调用)变化".一个变量是否有值则取决于1.它是否被绑定?2.如果绑定了.在哪个环境中?

大多数语言都使用静态作用域.如 Emacs Lisp,Common Lisp,Perl可使用动态作用域.

动态作用域的缺点比如阅读困难.结构控制复杂度的增加.

参考:


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter