common-lisp
Citation
Recherche…
Syntaxe
- (objet citation) -> objet
Remarques
Certains objets (par exemple des symboles de mots-clés) ne doivent pas être cités car ils s’évaluent eux-mêmes.
Exemple de citation simple
Quote est un opérateur spécial qui empêche l'évaluation de son argument. Il renvoie son argument, non évalué.
CL-USER> (quote a)
A
CL-USER> (let ((a 3))
(quote a))
A
'est un alias pour l'opérateur spécial QUOTE
La 'thing
notation est égale à (quote thing)
.
Le lecteur fera l'expansion:
> (read-from-string "'a")
(QUOTE A)
Les citations sont utilisées pour empêcher toute évaluation ultérieure. L'objet cité est évalué à lui-même.
> 'a
A
> (eval '+ 1 2)
3
Si les objets cités sont modifiés de manière destructive, les conséquences ne sont pas définies!
Évitez les opérations destructrices sur les objets cités. Les objets cotés sont des objets littéraux. Ils sont peut-être intégrés au code d'une manière ou d'une autre. Comment cela fonctionne et les effets des modifications ne sont pas spécifiés dans le standard Common Lisp, mais cela peut avoir des conséquences indésirables, comme modifier des données partagées, essayer de modifier des données protégées en écriture ou créer des effets secondaires involontaires.
(delete 5 '(1 2 3 4 5))
Citation et auto-évaluation d'objets
Notez que de nombreux types de données n’ont pas besoin d’être cités, car ils s’évaluent eux-mêmes. QUOTE
est particulièrement utile pour les symboles et les listes, pour empêcher l'évaluation en tant que formulaires Lisp.
Il n'est pas nécessaire de citer un exemple pour d'autres types de données pour empêcher l'évaluation: chaînes, nombres, caractères, objets CLOS, ...
Voici un exemple pour les chaînes. Les résultats de l'évaluation sont des chaînes, qu'elles soient ou non citées dans la source.
> (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")
Citer pour les objets est donc facultatif.