Trouver des éléments dans une liste en AutoLISP

Le Lisp (LISt Processing) porte bien son nom : c’est le roi du traitement de listes. Une liste, c’est simplement une suite d’éléments entre parenthèses.

Imaginons une liste de courses pour nos exemples :

(setq maListe '("Pain" "Beurre" "Confiture" "Café"))

Voici les bistouris pour disséquer cette liste et récupérer ce que tu veux.


1. CAR : La Tête :locomotive:

Cette fonction prend le tout premier élément de la liste. Juste le premier.

Pourquoi ce nom bizarre ? C’est une vieille histoire d’architecture informatique des années 50. Retiens juste « First ».

(car maListe)
;; Résultat : "Pain"

2. CDR : Le Reste du Corps :railway_car::railway_car::railway_car:

Lui, il enlève la tête et te rend tout le reste.

:warning: Attention : Le résultat est toujours une liste, même s’il ne reste qu’un seul élément.

(cdr maListe)
;; Résultat : ("Beurre" "Confiture" "Café")

Note : Il a rendu la liste sans le « Pain ».

3. CADR : Le Second (Le Cou) :giraffe:

C’est le chouchou des programmeurs. Il sert à attraper le deuxième élément.

En réalité, c’est une fusion : c’est le CAR (tête) du CDR (reste).

Traduction : « Prends le reste de la liste, puis prends la tête de ce reste ».

(cadr maListe)
;; Résultat : "Beurre"

4. LAST : La Queue :peach:

Comme son nom l’indique, il va chercher le tout dernier élément de la liste, peu importe sa longueur.

(last maListe)
;; Résultat : "Café"

5. NTH : Le Sniper :bullseye:

Tu veux un élément précis au milieu ? nth est là pour ça.

Mais attention, c’est un piège pour débutants !

Comme toujours en informatique, on commence à compter à 0.

  • Index 0 = Pain

  • Index 1 = Beurre

  • Index 2 = Confiture

;; Je veux le 3ème élément (donc l'index 2)
(nth 2 maListe)
;; Résultat : "Confiture"

Si tu demandes l’index 50 (qui n’existe pas), il renvoie nil (rien).

6. MEMBER : Le Détective :man_detective:

Il vérifie si un élément existe dans la liste.

Mais il a une particularité : il ne répond pas juste « Oui » ou « Non ».

S’il trouve l’objet, il renvoie la liste à partir de cet objet.

;; Est-ce qu'il y a de la "Confiture" ?
(member "Confiture" maListe)
;; Résultat : ("Confiture" "Café")

Pourquoi il renvoie ça ? Parce qu’en Lisp, tout ce qui n’est pas vide (nil) est considéré comme Vrai. Donc ça veut dire « Oui, j’ai trouvé, et voici la preuve ».

;; Est-ce qu'il y a du "Champagne" ?
(member "Champagne" maListe)
;; Résultat : nil (Non, dommage !)

Résumé express

  • CAR : Le 1er.

  • CDR : Tout sauf le 1er.

  • CADR : Le 2ème.

  • LAST : Le Dernier.

  • NTH : Un précis (Attention au 0).

  • MEMBER : Cherche et trouve.

  • Utile
  • Peut mieux faire
  • Inutile
0 votant

:right_arrow: Tous les tutos AutoLISP