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)