Li

Listes en Common Lisp

15 exercices

À propos de Listes

Les listes sont un type de données très courant en Common Lisp. Elles sont constituées d'une suite de cellules cons. Chaque car est un élément de la liste et chaque cdr est soit la cellule cons suivante, soit un atome terminal.

Une liste qui se termine par la liste vide est appelée une « liste propre ».

Une liste qui se termine par un atome autre que la liste vide est appelée une « liste pointée » (d'après la façon dont elle s'affiche : (cons 'a 'b) ;=> (a . b)).

Une liste peut aussi être circulaire si le cdr de l'une de ses cellules cons renvoie à une cellule cons située plus loin dans la liste. Par exemple : (let ((x (list 1))) (setf (cdr x) x) (write x :stream t :circle t) :done). Fais attention quand tu manipules des listes circulaires : les laisser s'afficher sans lier *print-circle* à t provoque une boucle infinie et bloque le REPL (dans cet exemple, en passant :circle t à write, *print-circle est lié à t).

Combine des listes

Tu peux appeler append avec n'importe quel nombre de listes, y compris 1 ou 0 :

(append '(a b c) '(1 2 3)) ; => (A B C 1 2 3)
(append '(a b c) '()))     ; => (A B C)
(append '(a b c))          ; => (A B C)
(append)                   ; => ()

Comme alternative à append, il y a nconc, qui donne le même résultat mais a pour effet de bord de modifier les listes. Fais attention quand tu utilises nconc, car ses effets peuvent être surprenants.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet

Apprends Listes

L'entraînement est verrouillé

Déverrouille 5 exercices de plus pour t'entraîner sur Listes