N° | Fonction | Catégorie | Version |
---|---|---|---|
BIL 18 | BiL_InsItem | Gestion des Listes | 1.0 - Janvier 2007 |
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. |
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).