Aller au contenu

supression d'un atom dans une liste


Messages recommandés

Posté(e)

Bonjour,

 

j'aimerai savoir s'il existerai une fonction qui suprimerai un atom dans une liste :

(1 2 3 4 5) -> suprimer le 3eme atome : (1 2 4 5)

Posté(e) (modifié)

Bonjour,

 

Supprimer l’atome en 3éme position ou supprimer l’atome qui vaut 3 ???

 

Si tu veux supprimer toutes les occurrences de l’atome spécifié de ta liste utilise vl-remove

_$ (vl-remove 3 '(1 2 3 4 5 3))
(1 2 4 5)

 

Sinon dans la bibliothèque de fonctions de manipulation de liste de (gile), il peut y avoir des fonctions qui peuvent t’intéresser, comme par exemple:

 

Pour ne supprimer que la première occurrence de l’atome spécifié

;; REMOVE-ELE 
;; Retourne la liste sans la première occurence de l'expression

(defun remove-ele (ele lst)
 (if (equal ele (car lst))
   (cdr lst)
   (cons (car lst) (remove-ele ele (cdr lst)))
 )
)

 

_$ (remove-ele 3 '(1 2 3 4 5 3))
(1 2 4 5 3)

 

Et pour supprimer le troisième atome de la liste (en fonction de sa position), tu as REMOVE-I

;; REMOVE-I 
;; Retourne la liste privée de l'élément à l'indice spécifié
;; (premier élément = 0)

(defun remove-i (ind lst)
 (if (or (zerop ind) (null lst))
   (cdr lst)
   (cons (car lst) (remove-i (1- ind) (cdr lst)))
 )
)

 

_$ (remove-i 2 '(1 2 3 4 5 3))
(1 2 4 5 3)

 

 

----------- Edit: Ajout d'une dernière proposition -------------

J’en rajouterai une petite dernière que j’avais donné récemment qui permet de supprimer toutes les occurrences d’un atome à toutes les profondeurs d’une liste

;;;  Supprime toutes les occurrences d'un élément à toutes les profondeurs d'une liste
;;;  (remove-prof 'a '(b a d (b (e a g) a) a e)) -> (B D (B (E G)) E)
(defun remove-prof (x l)
 (cond
   ((null l) nil)
   ((equal x (car l)) (remove-prof x (cdr l)))                                 
   ((listp (car l)) (cons (remove-prof x (car l)) (remove-prof x (cdr l))))
   (T (cons (car l) (remove-prof x (cdr l))))                                  
 )
)

 

A+

Modifié par VDH-Bruno

Apprendre => Prendre => Rendre

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité