Je suis d'un contexte impératif mais ces jours-ci, essayez mes mains sur Lisp (Lisp commun) P>
J'ai lu ici sur (contre x l): Lorsque j'avais intentionnellement utilisé une liste comme deuxième argument, quand j'ai utilisé p>
Qu'est-ce que j'ai manqué et qu'est-ce que contre code> que p>
Compte tenu d'un objet LISP X et d'une liste L, l'évaluation (CONS X L) crée une liste contenant x suivie des éléments de l. P>
blockQuote>
(inconvénient 'a' a) code> Je m'attendais à une erreur mais whoa! J'ai
(a. A) code>. p>
(a. a) code>? p>
3 Réponses :
'A code> est un atome LISP et
(a. A) code> est une liste dégénérée appelée A COREL ou" palette ". Puisque vous n'avez pas transmis une liste pour l'argument
l code> dans
(contre x l) code> Vous avez récupéré une cellule. P>
(contre x l)
donné X et L, CONS renvoie une nouvelle cellule de client avec X comme voiture de cette cellule et L comme le CDR de cette cellule. P>
Les listes sont des chaînes liées des cellules de la consacre. p> Si un inconvénient obtient deux symboles comme argument, il ressemble à ceci: p> CL-USER 143 > (sdraw (cons 'foo 'bar))
[*|*]---> BAR
|
v
FOO
Les deux endroits dans une cellule de client sont appelés "voiture" et "cdr". Vous pouvez visualiser une cellule aussi commune comme un bloc bisecté: p> dans LISP, une valeur peut également être une référence à quelque chose d'autre, par exemple, une autre cellule de client: P> contre code> construit une "cellule de contre". Cela n'a rien à voir avec les listes au début. Une cellule de client est une paire de deux valeurs. Une cellule de client est représentée sous forme écrite par une "paire de palettes", par ex.
(a. b) code>, qui détient les deux valeurs
'a code> et
' b code>.
+-----+-----+ +-----+-----+ +-----+-----+
| X | --------> | A | --------> | B | NIL |
+-----+-----+ +-----+-----+ +-----+-----+