Почему в этом случае локальная переменная elisp сохраняет свое значение?
Может ли кто-нибудь объяснить мне, чтопроисходит в этом очень простом фрагменте кода?
(defun test-a ()
(let ((x '(nil)))
(setcar x (cons 1 (car x)))
x))
По вызову(test-a)
впервые получаю ожидаемый результат:((1))
, Но, к моему удивлению, называя это еще раз, я получаю,((1 1))
((1 1 1))
и так далее. Почему это происходит? Я ошибаюсь, чтобы ожидать(test-a)
всегда возвращаться((1))
? Также обратите внимание, что после переоценки определенияtest-a
, возвращаемый результат сбрасывается.
Также учтите, что эта функция работает так, как я ожидаю:
(defun test-b ()
(let ((x '(nil)))
(setq x (cons (cons 1 (car x))
(cdr x)))))
(test-b)
всегда возвращается((1))
, Почему неtest-a
а такжеtest-b
эквивалент?