Matt666 Posté(e) le 6 décembre 2007 Posté(e) le 6 décembre 2007 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."
(gile) Posté(e) le 30 décembre 2007 Auteur Posté(e) le 30 décembre 2007 J'ai changé la routine SORT, la nouvelle est beaucoup plus rapide (entre 20 et 40 fois !). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Matt666 Posté(e) le 4 janvier 2008 Posté(e) le 4 janvier 2008 Ok, d'accord ! Merci Gile... "Chacun compte pour un, et nul ne compte pour plus d'un."
(gile) Posté(e) le 23 janvier 2008 Auteur Posté(e) le 23 janvier 2008 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
(gile) Posté(e) le 22 juillet 2008 Auteur Posté(e) le 22 juillet 2008 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
Matt666 Posté(e) le 23 juillet 2008 Posté(e) le 23 juillet 2008 Merci gile ! ;) "Chacun compte pour un, et nul ne compte pour plus d'un."
VDH-Bruno Posté(e) le 7 février 2012 Posté(e) le 7 février 2012 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant