QUOTE
QUOTE retourne "expression" sans évaluation.
Cela peut également être écrit de la manière suivante : ' expression
(l'expression précédée d'une apostrophe)
C'est une alternative à la fonction (list) pour créer des listes (list) à condition de ne pas avoir besoin "d'évaluer" les arguments.
Syntaxe | (quote expression) |
Argument | expression une expression AutoLISP. |
Valeur renvoyée | l'expression entrée en argument |
Exemples :
Syntaxe | Valeur renvoyée | Équivalent à | |
|
A | 'a | |
|
(A B) | '(a b) |
Cette fonction semble poser bien des soucis à bien des gens si on en croit les multiples interrogations à son sujet sur les forums, aussi je vais tenter d'en dire un peu plus que l'aide AutoCAD, sinon quel serait l'intérêt de ce site ?
L'expression citée peut être n'importe quelle forme de données AutoLISP, bien que l'apostrophe soit généralement utilisée avec des listes ou des symboles.
Tous les arguments donnés à une fonction sont évalués,
par exemple avec (cons) :
(list (cons 1 "Mot1") (cons 2 "Mot2") (cons 3 "Mot3")) |
Renvoie : ((1 . "Mot1") (1 . "Mot2") (1 . "Mot3")) sous forme de liste (list) composée de paires pointées (dotted pair)
Ici, chaque paire integer et string est passée en argument puis évaluée par la fonction (cons), qui retourne une paire pointée (dotted pair) (puisque deux atomes ont été fournis); chacune des paires pointées (dotted pair) résultantes est ensuite passée en arguments et évaluée par la fonction (list) pour retourner la liste comme indiqué dans la valeur renvoyée.
Cependant, à chaque étape, les données sont inchangées, et par conséquent, chaque évaluation de la fonction (cons) et (list) est inutile et redondante elle peut être considérée comme de l'inefficacité dans le code.
La liste des paires pointées (dotted pair) peut être proposée comme une expression littérale en utilisant l'apostrophe (quote) pour obtenir le même résultat sans l'évaluation de trois fonctions:
(setq ListeMots (quote ((1 . "Mot1") (2 . "Mot2") (3 . "Mot3")))) |
ou bien
(setq ListeMots '((1 . "Mot1") (2 . "Mot2") (3 . "Mot3"))) |
Dans les deux cas de syntaxe, la variable "ListeMots" contient :
((1 . "Mot1") (2 . "Mot2")(3 . "Mot3"))
Dans la deuxième forme le signe apostrophe remplace l'écriture littérale de la fonction (quote)
Si un argument DOIT être évalué (quote) ne pourra fonctionner, puisque sa raison d'être est justement de ne pas évaluer les arguments.
(setq a "MotVariable") (setq ListeMots (quote (a (2 . "Mot2") (3 . "Mot3")))) |
Valeur de la variable "ListeMots" : (A (2 . "Mot2") (3 . "Mot3"))
l'argument a n'a pas été évalué
à suivre ...
5 juin 2017
mise à jour le 11 mai 2018