N° | Fonction | Catégorie | Version |
---|---|---|---|
BIL 23 | BiL_Add | Gestion des Listes | 1.0 - Janvier 2007 |
But | Ajoute un élément à une liste, s’il n’y est pas déjà. |
Prototype | (BiL_Add Elément Liste) |
Argument | Elément - L’élément à ajouter à la liste - Divers - Liste - La liste à traiter - Liste - |
Retours | La liste modifiée ou non |
Var. globales | Néant |
Description | Ajoute un élément à une liste, en dernière position, s’il n’appartient pas déjà à cette liste. |
Notes | La fonction accepte également les listes quotées. Si la liste est nulle, l’élément est retourné (dans une liste) |
Exemples | Command: (setq List1 '(1 2 a b 5)) Command: (BiL_Add 7 List1) retourne (1 2 A B 5 7) Command: (BiL_Add 8 'List1) retourne (1 2 A B 5 8) Command: (BiL_Add 9 List2) retourne (9) List2 n’existe pas, donc nulle. Command: (BiL_Add 2 List1) retourne (1 2 A B 5) L’élément 2 existe déjà dans la liste. Command: (setq aa "texte") Command: (BiL_Add "azerty" aa) retourne nil aa n’est pas une liste, et n’est pas nul. Command: (BiL_Add '(7 "az") List1) retourne (1 2 A B 5 (7 "az")) L’élément à rajouter peut être une liste. |
1- (defun BiL_Add (*Elm *List1) 2- (if (= (type *List1) 'SYM) 3- (setq *List1 (BiN_Eval *List1)) 4- ) 5- (cond 6- ((not *List1) 7- (list *Elm) 8- ) 9- ((listp *List1) 10- (if (member *Elm *List1) 11- *List1 12- (append *List1 (list *Elm)) 13- ) 14- ) 15- (T nil) 16- ) 17- )
Lignes 2-4 : Si *List1 est un symbole, évalue ce symbole avec la fonction BiN_Eval. Ligne 5: Conditions : Lignes 6-8: - si *List1 n’existe pas, retourne l’élément *Elm dans une liste. Ligne 9: - si *List1 est une liste, Ligne 10: - si *Elm fait partie de *List1, Ligne 11: retourne *List1, sans modification. Ligne 12: sinon ajoute à *List1 l’élément *Elm transformé en liste. Ligne 15: - dans tous les autres cas, retourne nil.