LexicalVariable
以下代码中,由于语法闭包,set!修改的是局部变量而非全局变量
1 | (define add2 |
以下代码修改的是全局变量,因为指定给lambda传入一个空的参数列表
1 | (define bump-counter |
let & let*
1 | (let ((x 1) |
let可以显式的让参数进行语法闭包,设置为局部变量
1 | (let ((x 1) |
let针对变量的引用并不是从结构体中调用的,不作为结构的一部分,而是调用全局变量,以上的结构中,***(y x)是将全局变量中的x赋值给y*
如果想在引用时,优先考虑结构体内的变量,优先调用局部变量,使用let*
1 | (let* ((x 1) |
以下代码显示了Scheme的特性,可以将procedure赋值给变量,即一切皆数据
1 | (let ((cons (lambda (x y) (+ x y)))) |
fluid-let
fluid-let将内部的procedure求值时的全局变量临时进行设置
1 | (fluid-let ((counter 99)) |
在换成let后,bump-counter的引用依然是从全局变量中调用,即使设置了局部变量
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ZuowangDev's Blog!