Ce code est venu du tampon Emacs slime-reply SBCL em>: p>
CL-User> (Cons 'NotDefineDsymbol) P>
nil p>
CL-User> (Recherche-si # 'Consp' ('NotDefineDsymbol)) P>
'NotDefineDsymbol P>
blockQuote>
Si CEC renvoie NIL, alors pourquoi trouver-la-chose comme si C ESC renvoie une valeur réelle? P>
3 Réponses :
avec avec la seconde que vous avez Votre erreur est bien sûr que vous nidez des devis. Si vous l'aviez fait comme ça, vous obtenez le résultat attendu: p> (consp 'notdefinedsymbol) code>
Consp code> dans la position de l'opérateur est un symbole pour la fonction
#' Consp code> et c'est donc argument
(Quote NotDefineDsymbol) Code>, abrégé comme juste
'NotDefineDsymbol code> doit être évalué avant application. A
(citation x) code> Evalue sur les données
x code> dans notre cas, l'argument devient le symbole
notdefinedsymbol code>. Ce n'est pas un
contre code> mais un
symbole code> et donc le résultat est
nil code>
(Recherche-si # 'Consp' ('notdefinedsymbol)) code> et puisque
Recherche-si code> est une fucntion qu'il évalue ses arguments.
# 'Consp code> est évalué à l'objet de fonction et
' ('notdefinedsymbol) code> qui est court pour
(citation (((((ciote notdefinedsymbol))) code> est évalué . Comme toujours, il a évalué à son argument qui est
((citation notdefinedsymbol)) code>. C'est une liste avec un élément qui lui-même est une liste avec deux éléments, les symboles
ciote code> et
notdefineDsymbol code>. Depuis
(consp '(citation notdefinedsymbol); ==> t code>
Recherche-si code> évalue vers
(citation notdefineDsymbol) Code> et certaines imprimantes CL abrégeront A abréger un Liste de deux éléments sur lesquels le premier élément est code> de la même manière que le lecteur macro et imprimer
'notdefinedsymbol code> mais il est toujours une liste de deux éléments puisqu'il n'est pas de code , mais les données. P>
(find-if #'consp '(notdefinedsymbol)) ; ==> nil
(consp 'a) code> - Les arguments de fonction sont évalués en premier. Nous avons donc:
'A code> évalue à:
a code>. Et c'est un atome, donc
nil code>. P>
(trouver-si # 'consp' ('a)) code> évacue également les arguments d'abord. Mais pour le premier argument de la liste, il teste si
'A code> est un inconvénient. C'est parce que c'est
(citation a) code> (seul l'extérieur
' code> de la liste est évalué, l'intérieur devant
a code> non, Par conséquent,
'a code>. p>
a = notdefinedsymbol code>. p>
Votre appel: Ce que vous vouliez faire est probablement: Regardez The Docs pour (Recherche-si # 'Consp' (Symbole non défini)) code> est identique à (c'est-à-dire expansenté par le lecteur à)
(Recherche-si (Fonction Consp) (citation ((((titre)))) code>. L'argument
(citation (((((titre))) code> est évalué à la liste
((Symbole non défini non défini)) code> (c.-à-d. Une liste contenant un Liste contenant les deux symboles
citation code> et
non défini-symbole code>).
Recherche-si code> passe à travers cette liste extérieure, teste l'intérieur, qui est un inconvénient, avec
Consp code>, qui dit vrai em> et le renvoie. p>
(trouver-si # 'consp' (symbole non défini)) code>, lequel est identique à em>
(Recherche-if (Fonction Consp) (citation (symbole non défini)) code>. Remarque: Pas de citation imbriquée. P>
Devis Code>
et Le chapitre CLHS sur l'évaluation pour une meilleure compréhension. P>