Czy ktoś może wyjaśnić następujące zachowanie? W szczególności, dlaczego funkcja zwraca za każdym razem inną listę? Dlaczego nie jest some-list
inicjowana na '(0 0 0)
za każdym razem, gdy funkcja jest wywoływana?Dlaczego ta funkcja zwraca za każdym razem inną wartość?
(defun foo()
(let ((some-list '(0 0 0)))
(incf (car some-list))
some-list))
wyjściowa:
> (foo)
(1 0 0)
> (foo)
(2 0 0)
> (foo)
(3 0 0)
> (foo)
(4 0 0)
Dzięki!
EDIT:
Ponadto, co jest zalecanym sposobem realizacji tej funkcji, zakładając, że chcę, aby funkcja wyjścia '(1 0 0)
za każdym razem?
Ach, teraz ma sens. Dzięki za jasne wyjaśnienie. –
Prawdopodobnie byłoby miło dodać, że quasiquoting nie gwarantuje powrotu do nowych list. – 6502
"Jeśli nie wiesz, co robisz" Zachowanie modyfikacji danych literalnych jest niezdefiniowane. Zgodnie ze specyfikacją, nie możesz właściwie wiedzieć, co robisz (z pewnością), więc "powinieneś ** zawsze ** używać literalnych list (jak '(0 0 0)) tylko jako stałych". –