Question

Quelle est la différence entre:

(cons 'a (cons 'b 'c)) ;; (A B . C)

et

(cons 'a '(b.c)) ;; (A B.C)

Je dois créer la liste suivante ((a.b) .c) en utilisant contre donc je suis en train de comprendre ce que « » représente.

L.E :. Je le (cons (cons 'a 'b) 'c) suivant, mais il produit ((A . B) . C) et non ((A.B).C) (Notez les espaces supplémentaires)

Était-ce utile?

La solution

Les espaces sont utilisés pour les jetons de liste séparée. A.B est un seul jeton. (A.B) est une liste avec un seul élément. (A . B) est une cellule de contre avec A comme voiture et B comme cdr.

Une cellule de contre est une paire de « choses » (objets). Dans votre cas, ces choses sont des symboles, et ils sont nommés A, B, etc .. La représentation imprimée d'une telle cellule est (A . B), par exemple. Ceci est appelé « notation dot ». Le premier élément est appelé "voiture", le second "cdr".

La cons fonction crée une telle cellule. (cons 'a 'b) produit ainsi le (A . B) cellulaire. Notez que les noms sont toujours upcased interne .

Ceci est probablement ce que votre professeur voulait, donc ((A . B) . C) est la sortie correcte et votre code la bonne réponse. Ceci est une cellule où la voiture pointe vers une autre cellule, et le cdr contient C. Cette autre cellule est une cellule où la voiture contient A et la B cdr.

Par ailleurs, une est une chaîne linéaire de ces cellules le contre, de telle sorte que la voiture détient toujours une valeur et les points de cdr au reste de la liste. Les points de la dernière cdr nulle part (que l'on appelle NIL en Lisp). Dans la notation de point, une liste est, par exemple (A . (B . (C . NIL))). Étant donné que les listes sont importantes, ils peuvent être écrits plus courts comme ceci: (A B C). Si le dernier CDR a une valeur au lieu de NIL, il est indiqué dans la notation par points, par exemple (A . (B . (C . D)))) peut être écrit comme (A B C . D).

Autres conseils

. entre deux caractères est une partie d'un symbole. b.c est un symbole avec un nom de trois caractères:.. b , et c

Si vous entrez FOO.BAR, puis Lisp lira comme un symbole.

Si vous entrez (FOO.BAR) puis Lisp lira comme une liste avec un symbole que son contenu.

Si vous entrez (FOO . BAR) puis Lisp lira comme une cellule de contre avec FOO comme CAR et BAR comme CDR .

. est utilisé pour séparer les CAR et CDR d'une cellule de contre: (a . b). Notez l'espace autour ..

(cons 'b 'c) crée une cellule de contre avec le b symbole comme CAR et le symbole c comme CDR . Il est écrit que (b . c).

(cons 'a '(b.c)) crée une liste de deux symboles, a et b.c. Il est écrit que (a b.c).

((A.B).C) est toujours imprimé ((A.B) . C). Il est également pas une liste.

((a.b) . c) est une cellule de contre avec la liste (a.b) comme CAR et le symbole c comme CDR .

Si cela est au cours de l'apprentissage Lisp, la question ne probablement pas signifiait un implicite « pas d'espace laissé » règle, car les espaces ne sont pas significatifs contre parenthèses, et la réponse correcte est celle que vous avez donné.

En particulier, l'espace après une parenthèse de fermeture est toujours ajouté, mais il est à des fins de lisibilité humaine uniquement. Il ne fait aucun sens d'exiger qu'elle ne soit pas imprimé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top