Lisp中的词法绑定

Hub*_*ble 2 common-lisp

(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)

Rai*_*wig 6

因为这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)

特殊操作员LET,LET*.