關閉
函式記住它們定義的詞法範圍。因此,我們可以在 let 中包含一個 lambda 來定義閉包。
(defvar *counter* (let ((count 0))
(lambda () (incf count))))
(funcall *counter*) ;; => 1
(funcall *counter*) ;; = 2
在上面的示例中,計數器變數只能由匿名函式訪問。在以下示例中可以更清楚地看到這一點
(defvar *counter-1* (make-counter))
(defvar *counter-2* (make-counter))
(funcall *counter-1*) ;; => 1
(funcall *counter-1*) ;; => 2
(funcall *counter-2*) ;; => 1
(funcall *counter-1*) ;; => 3