lambda を let で包んであげると、クロージャを作ることができる。
;; (setf x (make-counter)) ;; (funcall x) ;; -> 1 ;; (funcall x) ;; -> 2 ;; (funcall x :output t) ;; -> 2 (defun make-counter (&key (init 0)) (let ((cnt init)) (lambda (&key (output nil)) (if output cnt (incf cnt)))))
言い方を変えれば、let で包まれた関数を返す関数はクロージャということ。