common-lisp
Citazione
Ricerca…
Sintassi
- (quota oggetto) -> oggetto
Osservazioni
Ci sono alcuni oggetti (per esempio simboli di parole chiave) che non hanno bisogno di essere citati dal momento che valutano a se stessi.
Esempio di citazione semplice
Quota è un operatore speciale che impedisce la valutazione della sua argomentazione. Restituisce il suo argomento, non valutato.
CL-USER> (quote a)
A
CL-USER> (let ((a 3))
(quote a))
A
'è un alias per l'operatore speciale QUOTE
La 'thing
notazione è uguale a (quote thing)
.
Il lettore farà l'espansione:
> (read-from-string "'a")
(QUOTE A)
La citazione viene utilizzata per impedire un'ulteriore valutazione. L'oggetto quotato valuta se stesso.
> 'a
A
> (eval '+ 1 2)
3
Se gli oggetti citati sono modificati in modo distruttivo, le conseguenze sono indefinite!
Evita le operazioni distruttive sugli oggetti quotati. Gli oggetti citati sono oggetti letterali. Sono forse incorporati nel codice in qualche modo. Come funziona e gli effetti delle modifiche non sono specificati nello standard Common Lisp, ma possono avere conseguenze indesiderate come la modifica dei dati condivisi, il tentativo di modificare i dati protetti da scrittura o la creazione di effetti collaterali indesiderati.
(delete 5 '(1 2 3 4 5))
Quote e oggetti autovalutati
Si noti che non è necessario citare molti tipi di dati, poiché valutano se stessi. QUOTE
è particolarmente utile per simboli e elenchi, per impedire la valutazione come forme Lisp.
Esempio per altri tipi di dati che non devono essere citati per impedire la valutazione: stringhe, numeri, caratteri, oggetti CLOS, ...
Ecco un esempio per le stringhe. I risultati della valutazione sono stringhe, indipendentemente dal fatto che siano citati nella fonte o meno.
> (let ((some-string-1 "this is a string")
(some-string-2 '"this is a string with a quote in the source")
(some-string-3 (quote "this is another string with a quote in the source")))
(list some-string-1 some-string-2 some-string-3))
("this is a string"
"this is a string with a quote in the source"
"this is another string with a quote in the source")
Citando per gli oggetti, quindi è facoltativo.