Qualcuno può spiegare il seguente comportamento? In particolare, perché la funzione restituisce ogni volta un elenco diverso? Perché non è some-list
inizializzato su '(0 0 0)
ogni volta che viene chiamata la funzione?Perché questa funzione restituisce un valore diverso ogni volta?
(defun foo()
(let ((some-list '(0 0 0)))
(incf (car some-list))
some-list))
uscita:
> (foo)
(1 0 0)
> (foo)
(2 0 0)
> (foo)
(3 0 0)
> (foo)
(4 0 0)
Grazie!
EDIT:
Inoltre, qual è il metodo consigliato di implementare questa funzione, supponendo che io voglio la funzione di uscita '(1 0 0)
ogni volta?
Ah, ha senso ora. Grazie per la chiara spiegazione. –
Probabilmente sarebbe bello aggiungere che anche a quasiquote non è garantito il ritorno di nuove liste. – 6502
"a meno che tu non sappia, cosa stai facendo" Il comportamento di modifica dei dati letterali non è definito. Secondo le specifiche, non puoi sapere cosa stai facendo (con certezza), quindi "dovresti ** sempre ** usare liste letterali (come '(0 0 0)) solo come costanti". –