Мб кто-то объяснит. В буффере emacs-lisp c lexical binding, последняя let форма возвращает 3. разве при лексическом связывании не должно возвращать -97? Похожий код в scheme возвращает -97.
(defvar x -99)
(defun addx ()
(setq x (+ 1 x)))
(let ((x 1))
(addx)
(addx))
(define x -99)
(define (addx)
(set! x (+ 1 x))
x)
(let ((x 1))
(addx)
(addx))