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.