| N° | Fonction | Catégorie | Version |
|---|---|---|---|
| BIL 15 | BiL_SubLst | Gestion des Listes | 1.0 - Janvier 2007 |
| But | Extrait une sous-liste d'une liste, avec les numéros d'ordre. |
| Prototype | (BiL_SubLst Global_Liste Num_Deb Num_Fin) |
| Arguments | Global_Liste - La liste principale à traiter - Liste - Num_Deb - Numéro du 1er élément de la sous-liste - Entier - Num_Fin - Numéro du dernier élément de la sous-liste - Entier - |
| Retours | La sous- liste extraite - Liste - |
| Var. globales | Néant |
| Description | A partir d'une liste globale, la fonction extrait une sous-liste en donnant les numéros d'ordre des premiers et derniers éléments. |
| Notes | Le comptage se fait normalement : 1er élément = numéro 1, etc... |
| Exemples |
Commande: (BiL_SubLst '(1 2 3 4 5 6 7 8 9) 2 5)
retourne (2 3 4 5)
(BiL_SubLst (list (9 8 7 6 5 4 3 2 1)) 3 8)
retourne (7 6 5 4 3 2)
(BiL_SubLst '("aa" "BB" "cc" "DD" "eE" "ff") 1 3)
retourne ("aa" "BB" "cc")
Commande: (BiL_SubLst '(1.23 1 "aa" 2.22 3 ) 2 4)
retourne (1 "aa" 2.22)
Commande: (BiL_SubLst '(1 2 3 4 5 6) 4 3)
retourne nil
(BiL_SubLst '(1.23 1 "aa" 2.22 3 "trois" 4.44) 4 4)
retourne (2.22)
|
1- (defun BiL_SubLst (*ListG *First *Last / LstRet Cpt1) 2- (if (and *ListG 3- (Listp *ListG) 4- (= (type *First) 'INT) 5- (= (type *Last) 'INT) 6- (<= *First *Last) 7- ) 8- (progn 9- (setq Cpt1 (- *First 2)) 10- (repeat (1+ (- *Last *First)) 11- (setq LstRet (cons (nth (setq Cpt1 (1+ Cpt1)) *ListG) LstRet)) 12- ) 13- (setq LstRet (reverse LstRet)) 14- ) 15- ) 16- )
Ligne 2 : Si le 1er argument *ListG est une liste non nulle, si les arguments *First et
*Last sont des nombres entiers et si *First est plus petit ou égal à *Last,
Ligne 9 : Initialise le compteur égal au nombre de départ moins 2.
Ligne 10 : Boucle autant de fois que la différence entre *Last et *First plus 1.
Ligne 11 : Ajoute au début de LstRet l'élément numéro (Cpt1 +1) de *ListG
Ligne 12 : Remonte la boucle en ligne 10 ou
Ligne 13 : Retourne la liste LstRet après avoir inversé l'ordre des éléments.