¿Alguien puede explicar el siguiente comportamiento? Específicamente, ¿por qué la función devuelve una lista diferente cada vez? ¿Por qué no se inicializa some-list
en '(0 0 0)
cada vez que se llama a la función?¿Por qué esta función devuelve un valor diferente cada vez?
(defun foo()
(let ((some-list '(0 0 0)))
(incf (car some-list))
some-list))
Salida:
> (foo)
(1 0 0)
> (foo)
(2 0 0)
> (foo)
(3 0 0)
> (foo)
(4 0 0)
Gracias!
EDIT:
Además, ¿cuál es la forma recomendada de implementar esta función, suponiendo que desea que la función de salida '(1 0 0)
cada vez?
Ah, tiene sentido ahora. Gracias por la explicación clara. –
Probablemente sería bueno agregar que también el cuasiquoting no garantiza la devolución de listas nuevas. – 6502
"a menos que sepa, lo que está haciendo" El comportamiento de modificar datos literales no está definido. De acuerdo con la especificación, en realidad no se puede saber lo que se está haciendo (con certeza), por lo que "siempre ** debes ** usar listas literales (como '(0 0 0)) solo como constantes'. –