Почему в этом случае локальная переменная 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 эквивалент?

Ответы на вопрос(3)

Ваш ответ на вопрос