BiL_SubLst

Fonction Catégorie Version
BIL 15 BiL_SubLst Gestion des Listes 1.0 - Janvier 2007

Description

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)
	

La fonction


  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. 

Listp : Retourne T si *ListG est une liste, nil dans les autres cas.
Type : Renvoie le type de l'élément spécifié (*First ou *Last).
Repeat Ici, évalue la ligne 11 autant de fois que la différence ( *Last - *First ) +1.
Cons : Construit la liste LstRet en y ajoutant le nouvel élément en début de liste.
Nth : Renvoie le nième élément d'une liste. - Le 1er élément est le numéro zéro.
Reverse : Renvoie une liste avec ses éléments inversés.