MAC Posté(e) le 28 mai 2005 Posté(e) le 28 mai 2005 Bonjour à tous!soit la liste de point suivant:((163.873 98.5) (10.5 20.5)(10.5 20.5) (454.535 185.5) (481.596 102.5)) quel fonction me permettrait de tester la liste et d'oter le point en double "(10.5 20.5)" et en général de supprimer tout element en double dans une liste? Voici le point d'insertion d'une entité en x y z:(10 20.50 20.50 1.0)Est-ce que je peux utiliser des caracteres generiques pour ne modifier que l'altitude z d'un element d'une liste dxf d'entité?Ce qui donnerait:(setq entlist(entget (car (entsel "Objet:"))))(setq Entlist (append Entlist (list (cons 10 * * 0.0))))(entmod Entlist) Mais le symbole " * " ne fonctionne pas bien sur! Bon Week!
Tramber Posté(e) le 28 mai 2005 Posté(e) le 28 mai 2005 (setq entlist(entget (car (entsel "Objet:"))))(setq point (append (if(=(length(cdr(assoc 10 entlist)))2)(cdr(assoc 10 entlist))(list(car(cdr(assoc 10 entlist)))(cadr(cdr(assoc 10 entlist))))) (list 0))) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
didier Posté(e) le 28 mai 2005 Posté(e) le 28 mai 2005 Bonjour à Toi, pour ta deuxième question je te propose une alternative : (setq ent (car(entsel"\nChoix de l'Objet\n")) ......... ent2 (entget ent) ......... pins (cdr(assoc 10 (entget ent))) ......... z-actuel (caddr pins) ......... z-nouveau (cons 10(list (car pins)(cadr pins)0)) ......... ent (subst z-nouveau (assoc 10 ent2) ent2) ......... )(entmod ent) je t'en souhaite une bonne utilisation. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
gile Posté(e) le 28 mai 2005 Posté(e) le 28 mai 2005 Salut MAC, pour ta première question je te propose ce code façon "récursive" : ;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste (defun REMOVE_DOUBLES (lst) (cond ((null lst) nil) (T (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst))) ) ) ) A plus
MAC Posté(e) le 30 mai 2005 Auteur Posté(e) le 30 mai 2005 Merci!Donc, si j'ai bien compris pas de caracteres generiques en lisp?dommage!mais ceci fera très bien l'affaire et d'ailleurs j'aurai pu faire un petit effort de reflexion sur le sujet !.Grace à vous,je me coucherai plus tot ce soir. Fonction "recursive"? c'est nouveau ça!je teste et essaie de comprendre.(fonction dans la fonction?) A+Cordialement.
gile Posté(e) le 30 mai 2005 Posté(e) le 30 mai 2005 Salut Mac, On parle de "récusivité" pour une fonction qui s'appelle elle même dans sa définition j'ai découvert çà ici où il y a d'autres liens vers des forums en anglais. Je trouve çà puissant et très élégant.On aurait pu écrire, de manière "itérative" : (defun remove-doubles (lst / lst2) (while (car lst) (setq lst2 (cons (car lst) lst2) lst (vl-remove (car lst) lst) ) ) (reverse lst2) ) A plus...
Tramber Posté(e) le 30 mai 2005 Posté(e) le 30 mai 2005 WCMATCH si tu cherches vraiment à comparer des chaines et des génériques Mais ca vaut pas le coup pour les valeurs numériques ;) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
MAC Posté(e) le 1 juin 2005 Auteur Posté(e) le 1 juin 2005 OUI! puissantes ces fonctions "recursives", et à developper.J'avais pas vu la fonction "WCMATCH" mais en effet elle fonctionne que sur les listes caracteres,et à priori la seule qui prenne les caracteres generiques. Merci à tous.A+
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