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))
не надо так
это пример из elisp manuala прои dinamical binding
defvar как раз делает динамические переменные (в CL так же). В Scheme аналог называется по-моему make-parameter.
Обсуждают сегодня