¿Por qué una variable local elisp mantiene su valor en este caso?
¿Podría alguien explicarme lo que está pasando en este fragmento de código muy simple?
(defun test-a ()
(let ((x '(nil)))
(setcar x (cons 1 (car x)))
x))
Sobre una llamada(test-a)
Por primera vez, obtengo el resultado esperado:((1))
. Pero para mi sorpresa, llamándolo una vez más, me sale.((1 1))
, ((1 1 1))
y así. ¿Por qué está pasando esto? Me equivoco al esperar(test-a)
para volver siempre((1))
? También tenga en cuenta que después de re-evaluar la definición detest-a
, el resultado de retorno se reinicia.
También considera que esta función funciona como espero:
(defun test-b ()
(let ((x '(nil)))
(setq x (cons (cons 1 (car x))
(cdr x)))))
(test-b)
siempre vuelve((1))
. Porque notest-a
ytest-b
¿equivalente?