Aller au contenu

Messages recommandés

Posté(e)

Cool ! Ca fonctionne ! merci Gile !

 

Juste au passage, dans ta routine sort, c'est remove[surligneur]-[/surligneur]doubles et pas remove[surligneur]_[/surligneur]doubles....

"Chacun compte pour un, et nul ne compte pour plus d'un."

  • 4 semaines après...
  • 3 semaines après...
Posté(e)

Optimisation de SORT suite au Challenge 20.

La routine, contrairement à vl-sort, ne supprime pas les doublons. Pour les supprimer il suffit d'utiliser remove-doubles, exemple :

(sort (remove-doubles '(3 5 6 2 1 3 8 9 4 5)) ' (1 2 3 4 5 6 8 9)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 5 mois après...
Posté(e)

Salut,

 

Ajout au premier message de fonctions équivalentes aux fonctions vlax-ldata-* qui permettent de stocker et de récupérer des données (points, réels, entiers,chaînes, listes) dans des dictionnaires attachés au dessin.

Ces données sont conservées après fermeture du dessin.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 3 ans après...
Posté(e)

Bonjour,

 

J’ajoute ici une petite contribution à ce fil de discussion, pour remove ma version moins concise mais pas moins performante..

;;; équivalence à vl-remove
;;; Supprime toutes les occurrences d'un élément d'une liste
;;; (remove 'a '(b c a d a e a)) -> (B C D E)
(defun remove (x l)
 (cond
   ((null l) nil)
   ((equal x (car l)) (remove x (cdr l)))
   (T (cons (car l) (remove x (cdr l))))
 )
)

 

Dans le même esprit on peut facilement donner une variante à la fonction remove-doubles, si on n’accorde évidemment pas une grande importance à l’ordre des éléments..

;;; Supprime tous les doublons d'une liste
;;; A n’utiliser que si l'ordre des éléments n'a pas d'importance
;;; (remove-doubles '(a b c b d a)) -> (C B D A)
(defun remove-doubles (l)
 (cond	((null l) nil)
((member (car l) (cdr l)) (remove-doubles (cdr l)))
(T (cons (car l) (remove-doubles (cdr L))))
 )
)

 

Et en modifiant très légèrement l’expression, on peut également construire un remove sur toutes les profondeurs d’une liste.

;;;  Supprime toutes les occurence 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+

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é