BiL_InsItem

Fonction Catégorie Version
BIL 18 BiL_InsItem Gestion des Listes 1.0 - Janvier 2007

Description

But Insère un élément dans une liste, à une position donnée.
Prototype (BiL_InsItem Liste PosItem NewItem)
Argument Liste - La liste à traiter - Liste -
PosItem - Position de l’élément à insérer - Entier -
NewItem - Valeur du nouvel élément - Tout type -
Retours La liste modifiée ou non
Var. globales Néant
Description Retourne une liste après y avoir inséré un nouvel élément à une position définie dans la liste.
Notes Le comptage se fait normalement : 1er élément = numéro 1, etc...
Le numéro d’ordre correspond à celui du nouvel élément, une fois inséré.
Exemples

Commande: (BiL_InsItem '(1 2 3 4 5 6 7 8 9) 5 "c")
	retourne	(1 2 3 4 "c" 5 6 7 8 9)
	
(BiL_InsItem '("a" "b" "c" "d" "e" "f" "g") 3 "X")
	retourne	("a" "b" "X" "c" "d" "e" "f" "g")

Commande: (BiL_InsItem (list "aa" "bb" "cc") 0 "Z")
	retourne 	("aa" "bb" "cc")
	Il n’y a pas de position 0. Le 1er élément est 1.

Commande: (BiL_InsItem (list "aa" "bb" "cc") 4 "X")
	retourne   	("aa" "bb" "cc") 
  Ne fonctionne que pour une insertion entre des éléments existants.

Commande: (Bil_InsItem List3 2 "X")	retourne 	nil
	List3 n’est pas une liste.


La fonction


 1- (defun BiL_InsItem(*List1 *PosElm *NewElm / LstRet Cpt1)

 2-    (setq Cpt1 0)
 3-    (repeat (length *List1)
 4-      (if (= Cpt1 (1- *PosElm))
 5-        (setq LstRet (append LstRet (list *NewElm) (list (nth Cpt1 *List1))))  
 6-        (progn   
 7-          (if (= Cpt1 0)
 8-            (setq LstRet (list (nth Cpt1 *List1)))
 9-            (setq LstRet (append LstRet (list (nth Cpt1 *List1))))
10-          )  			;  fin de if   ligne 7
11-        )       			;  fin progn   ligne 6
12-      )      			;  fin de if   ligne 4
13-      (setq Cpt1 (1+ Cpt1))
14-    )                                ;  fin de repeat    ligne 3
15-    LstRet
16-	)
Ligne 2 :  Initialise le compteur d’éléments – Le 1er élément est le numéro 0
Ligne 3 :  Répète autant de fois qu’il y a d’éléments dans la liste 
Ligne 4 :    Si le compteur numéro d’élément correspond à l’argument Position_d’élément,	
Ligne 5 :      Ajoute dans LstRet le nouvel élément *NewElm  puis l‘élément correspondant 
                    à l’argument Position_d’élément
Ligne 6 :      Sinon si le compteur numéro d’élément ne correspond pas à 
                   l’argument Position_d’élément
Ligne 7 :      Si c’est le premier élément de la liste,
Ligne 8 :         La liste de retour LstRet est égale au 1er élément *List1
Ligne 9 :           Sinon ajoute l’élément numéro Cpt1 à la liste de retour LstRet
Ligne 13 :     Incrémente le compteur numéro d ”élément		
Ligne 15 :  Retourne la liste LstRet.(ou nil si l’argument *List1 n’est pas une liste).

Repeat : Ici, évalue les lignes 14 à 18 autant de fois qu’il y a d’éléments dans la liste *List1.
Length : Renvoie un nombre entier indiquant le nombre d'éléments contenus dans une liste.
List : Prend un nombre quelconque d'expressions et les regroupe dans une liste.
Append : Prend un nombre indéfini de listes et les traite ensemble comme une seule liste.
Nth : Renvoie le nième élément d'une liste. - Le 1er élément est le numéro zéro.