11
votes

Sortie inattendue avec contre ()

Je suis d'un contexte impératif mais ces jours-ci, essayez mes mains sur Lisp (Lisp commun)

J'ai lu ici sur contre que

(contre x l):

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.

Lorsque j'avais intentionnellement utilisé une liste comme deuxième argument, quand j'ai utilisé

(inconvénient 'a' a) Je m'attendais à une erreur mais whoa! J'ai (a. A) .

Qu'est-ce que j'ai manqué et qu'est-ce que (a. a) ?


0 commentaires

3 Réponses :


1
votes

'A est un atome LISP et (a. A) 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 dans (contre x l) Vous avez récupéré une cellule.


0 commentaires

1
votes

(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> xxx pré>

Si un inconvénient obtient deux symboles comme argument, il ressemble à ceci: p>

CL-USER 143 > (sdraw (cons 'foo 'bar))

[*|*]---> BAR
  |
  v
 FOO


0 commentaires

7
votes

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>.

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> xxx pré>

dans LISP, une valeur peut également être une référence à quelque chose d'autre, par exemple, une autre cellule de client: P>

+-----+-----+       +-----+-----+       +-----+-----+
|  X  |   --------> |  A  |   --------> |  B  | NIL |
+-----+-----+       +-----+-----+       +-----+-----+


0 commentaires