BiL_DelIfNot (DeL if not)

Fonction Catégorie Version
BIL 22 BiL_DelIfNot Gestion des Listes 1.0 - Janvier 2007

Description

But Retire les éléments d’une liste qui ne satisfont pas à une condition.
Prototype (BiL_DelIfNot Condition Liste)
Argument Condition - La fonction de condition - fonction -
Liste - La liste à traiter - Liste -
Retours La liste modifiée ou non
Var. globales Néant
Description Retourne une liste en conservant les éléments qui satisfont à une condition
Notes La fonction de condition ne doit comporter qu’un seul argument.
Contrairement à BiL_DelIf, ne pas mettre la fonction de condition sous quote.
Exemples

Command: (BiL_DelIfNot zerop '(0 1 2 3 4 5 6 0 7 8))
	retourne	(0 0)
	(zerop vérifie si un élément est égal à 0)

Command: (BiL_DelIfNot numberp '(0 1 2 (1 2) "az" (4 "a")))	
	retourne	(0 1 2)	
	(numberp vérifie si un élément est un nombre réel ou entier)
	Nota (1 2) n’est pas retourné parce que c’est une liste.
	
Command: (BiL_DelIfNot listp '(0 1 2 (1 2) "az" (4 "a")))
	retourne ((1 2) (4 "a"))
	(listp vérifie si un élément est une liste)

Et si on crée une nouvelle fonction personnalisée telle que :
Command: (defun stringp (*str)(= (type *str) 'STR))
	On pourra ne conserver que les chaînes d’une liste :
Command: (BiL_DelIfNot stringp '(1 2 ("a" "b") "c" 3 "d"))
	qui retourne   ("c" "d")
  Nota ("a" "b") n’est pas retourné parce que c’est une liste.

La fonction


 1- (defun BiL_DelIfNot (*fct *List1)

 2-     (apply 
 3-             'append (mapcar '(lambda(elm) 
 4-                                          (if(*fct elm)
 5-                                             (list elm)
 6-                                          )
 7-                               ) 
 8-                               *List1)
 9-                     )
10-     )
11- )	

Ligne 3 :   Pour chaque élément de *List1, ajoute à la liste de retour,
Ligne 4:       - Si la fonction de condition est vraie
Ligne 5:	           		- l’élément en question
Ligne 6:	           		- sinon rien.

Apply : Transmet une liste d'arguments à la fonction spécifiée.
Append : Prend un nombre indéfini de listes et les traite ensemble comme une seule liste.
Mapcar : Renvoie une liste en résultat de l'exécution d'une fonction ayant comme arguments les arguments d’une liste définie (ici *List1).
Lambda : Définit une fonction anonyme