(let ((a 3))
(let ((a 4)
(b a))
(+ a b)))
Run Code Online (Sandbox Code Playgroud)
上面的代码评估逻辑是b取外部的值a.根据我的理解,在词汇绑定中,每次使用'let'都会创建一个新的位置.那么为什么b声明中的变量(b a)不使用afrom 的值(a 4)?
因为这LET是指定要做的事情.绑定是并行完成的.
CL-USER 60 > (let ((a 3))
(let ((a 4)
(b a))
(+ a b)))
7
Run Code Online (Sandbox Code Playgroud)
调用以顺序方式完成绑定的版本LET*.
CL-USER 61 > (let ((a 3))
(let* ((a 4)
(b a))
(+ a b)))
8
Run Code Online (Sandbox Code Playgroud)