| N° | Fonction | Catégorie | Version |
|---|---|---|---|
| BIL 10 | BiL_DelOne | Gestion des Listes | 1.0 - Janvier 2007 |
| But | Retourne une liste après y avoir enlevé un élément unique. |
| Prototype | (BiL_DelOne Item1 Liste1) |
| Argument | Elément - L’élément à supprimer de la liste - tout type - Liste - La liste à réduire - Liste - |
| Retours | La liste réduite ou nil |
| Var. globales | Néant |
| Description | Retire un élément unique d'une liste. |
| Notes | Cette routine ne fonctionne pas si l'élément à effacer n'est pas unique : elle retournera alors une liste aberrante. Par contre, elle est nettement plus rapide que BiL_DelItem. Si l'élément n'est pas trouvé, la liste est retournée intacte. Voir également les fonctions BiL_DelItem et BiL_DelPrim. |
| Exemples |
Command: (setq list1 '(1 2 3 4 5 6 7 8 9))
(1 2 3 4 5 6 7 8 9)
(BiL_DelOne 3 list1) retourne (1 2 4 5 6 7 8 9)
(BiL_DelOne 10 list1) retourne (1 2 3 4 5 6 7 8 9)
(BiL_DelOne 6 list1) retourne (1 2 3 4 5 7 8 9)
(BiL_DelOne 3 toto) retourne nil
Command : (setq list2 '("A" "B" "C" "D" "E" "D"))
("A" "B" "C" "D" "E" "D")
(BiL_DelOne "E" list2) retourne ("A" "B" "C" "D" "D")
(BiL_DelOne "D" list2) retourne ("A" "B" "C" "D" "E" "E" "D")
mais
(BiL_DelItem "D" list2) retourne ("A" "B" "C" "E")
|
1- (Defun BiL_DelOne (*Item1 *List1) 2- (if (and 3- (Listp *List1) ; Si *List1 est bien une liste 4- (member *Item1 *List1) ; et *Item1 un élément de cette liste, 5- ) 6- (setq *List1 (append 7- (reverse (cdr (member *Item1 (reverse *List1)))) 8- (cdr (member *Item1 *List1)) 9- ) 10- ) 11- ) ; fin de if 12- *List1 ; retourne *List1 (une liste ou nil) 13- )
Supposons Command: (setq *list1 '(A B C D E F G)
*Item1 'C )
Ligne 7 (reverse *List1) retourne (G F E D C B A)
reverse : Inverse l'ordre des éléments de *List1.
Ligne 7 (member *Item1 (reverse *List1)) retourne (C B A)
member : Retourne le reste de *List1 en commençant par la première
occurrence de *Item1.
Ligne 7 (cdr(member *Item1 (reverse *List1))) retourne (B A)
cdr : retourne ce qui suit après y avoir enlevé le 1er élément.
Ligne 7 (reverse (cdr (member *Item1 (reverse *List1)))) retourne (A B)
reverse : Inverse l'ordre des éléments de la liste obtenue.
Ligne 8 (member *Item1 *List1) retourne (C D E F G)
member : Retourne le reste de *List1 en commençant par la première
occurrence de *Item1.
Dans cette ligne, *List1 n'a pas été inversé.
Ligne 8 (cdr(member *Item1 *List1)) retourne (D E F G)
cdr : retourne la liste qui suit après y avoir enlevé le 1er élément.
Ligne 6 (append ligne 7 ligne 8 ) retourne (A B D E F G)