BiL_Add

Fonction Catégorie Version
BIL 23 BiL_Add Gestion des Listes 1.0 - Janvier 2007

Description

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.

La fonction


 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.

Type : Renvoie le type de l'élément spécifié.
BiN_Eval : Fonction BiRaRR qui évalue tout type de symbole, même les listes.
List : Prend un nombre quelconque d'expressions et les regroupe dans une liste.
Listp : Retourne T si *List1 est une liste, nil dans les autres cas.
Member : Recherche une expression dans une liste et renvoie le reste de cette liste ou nil s’il ne trouve rien.
Append : Prend un nombre indéfini de listes et les traite ensemble comme une seule liste.