| N° | Fonction | Catégorie | Version |
|---|---|---|---|
| BIL 09 | BiL_DelItem | Gestion des Listes | 1.0 - Janvier 2007 |
| But | Retourne une liste après y avoir enlevé un élément. |
| Prototype | (BiL_DelItem Item1 Liste1) |
| Arguments | Item1 - L’élément supprimer - tout type - Liste1 - La liste à réduire - Liste - |
| Retours | La liste réduite ou nil |
| Var. globales | Néant |
| Description | Retourne une liste après y avoir enlevé un élément de la liste. Si cet élément à supprimer existe en plusieurs exemplaires, ils seront tous retirés. |
| Notes | Voir également les fonctions BiL_DelOne et BiL_DelPrim. Cette routine fonctionne même si l'élément à effacer n'est pas unique, Chaque occurrence sera supprimée. Si l'élément n'existe pas dans la liste, la fonction retourne la liste intacte. |
| Exemples |
Command: (setq list1 '(1 2 3 4 5 6 7 8 3))
(1 2 3 4 5 6 7 8 3)
(BiL_DelItem 3 list1) retourne (1 2 4 5 6 7 8)
Command:(setq list2 '("aa" "bb" "cc" "aa" "ee" "ee"))
("aa" "bb" "cc" "aa" "ee" "ee")
Command: (BiL_DelItem "cc" list2) retourne
("aa" "bb" "aa" "ee" "ee")
Command: (BiL_DelItem "aa" list2) retourne
("bb" "cc" "ee" "ee")
Command: (BiL_DelItem "aa" list3) retourne nil
Command: (BiL_DelItem "xx" list2) retourne
("aa" "bb" "cc" "aa" "ee" "ee")
|
1- (Defun BiL_DelItem ( *Item1 *List1 / List2)
2- (if (and
3- (Listp *List1)
4- (member *Item1 *List1)
5- )
6- (progn
7- (foreach Element *List1
8- (if (not (equal Element *Item1))
9- (setq List2 (cons Element List2))
10- )
11- ) ; fin de la boucle foreach
12- (reverse List2)
13- ) ; fin de progn
14- *List1 ; else
15- ) ; fin de if
16- )
Ligne 3 : Si *List1 est bien une liste
Ligne 4 : et *Item1 un élément de cette liste,
Ligne 7 : Pour chaque élément de *List1
Ligne 8 : si cet élément diffère de *Item1,
Ligne 9 : ajoute l'élément au début de List2
Ligne 10 : sinon rien
Ligne 12 : inverse les éléments de List2 puisque la liste est construite à l’envers
Ligne 14 : sinon (les conditions lignes 3 et 4 ne sont pas remplies) retourne la
liste initiale *List1.