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.