N° | Fonction | Catégorie | Version |
---|---|---|---|
BIL 21 | BiL_DelIf | Gestion des Listes | 1.0 - Janvier 2007 |
But | Retire, sous condition, un ou plusieurs éléments d’une liste. |
Prototype | (BiL_DelIf 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 après y avoir enlevé les éléments qui satisfont à une condition |
Notes | La fonction de condition ne doit comporter qu’un seul argument. La fonction de condition doit être sous quote comme ’zerop |
Exemples | Command: (BiL_DelIf 'zerop '(0 1 2 3 4 5 6 0 7 8)) retourne (1 2 3 4 5 6 7 8) (zerop vérifie si un élément est égal à 0) Command: (BiL_DelIf 'numberp '(0 1 2 (1 2) 3 (4 5))) retourne ((1 2) (4 5)) (numberp vérifie si un élément est un nombre réel ou entier) Et si on crée une nouvelle fonction personnalisée telle que : Command: (defun stringp (*str)(= (type *str) 'STR)) On pourra supprimer les chaînes d’une liste : Command: (BiL_DelIf 'stringp '(1 2 (3 4) "toto" 5 "")) qui retourne (1 2 (3 4) 5) |
1- (defun BiL_DelIf (*fct *List1) 2- (cond 3- ((atom *List1) 4- *List1 5- ) 6- ((apply *fct (list (car *List1))) 7- (BiL_DelIf *fct (cdr *List1)) 8- ) 9- (t (cons 10- (car *List1) 11- (BiL_DelIf *fct (cdr *List1)) 12- ) 13- ) 14- ) 15- )
Ligne 2 : Conditions : Lignes 3-4 : - Si l’argument *List1 est un atome, retourne *List1 Lignes 6-7 : - Si la fonction de condition appliquée au premier élément restant de *List1 retourne T, continue la fonction récursivement sur le reste de *List1 (Dans ce cas, le 1er élément n’est pas rajouté à la liste de retour). Lignes 9-12 : - Dans tous les autres cas, construit une liste avec le 1er élément de *List1 et le résultat de la récursion du reste de la liste. Si on ajoute (print *List1) entre les lignes 1 et 2 à l’exemple suivant : Command: (BiL_DelIf 'zerop '(0 1 2 3 4 5 6 0 7 8)) On va obtenir les valeurs suivantes de *List1, au fur et à mesure de la récursion. (0 1 2 3 4 5 6 0 7 8) (1 2 3 4 5 6 0 7 8) (2 3 4 5 6 0 7 8) (3 4 5 6 0 7 8) (4 5 6 0 7 8) (5 6 0 7 8) (6 0 7 8) (0 7 8) (7 8) (8) nil (1 2 3 4 5 6 7 8)