DenisHen Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 Bonjour à la communauté. J'aimerais comptabiliser des entités de mon dessin qui sont dans une liste, mais je ne sais pas comment faire. J'aimerais, en fait, ajouter 1 à un élément d'une liste. Ma liste est : (setq ListNb (list 0 0 0 0 0 0)) Et lorsque je rencontre une entité qui serait en troisième position, il faudrait ajouter 1 au troisième élément de la liste ListNb, ce qui donnera ListNb = 0 0 1 0 0 0 Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
VDH-Bruno Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 _$ (cons (car ListNb) (cons (cadr ListNb) (cons (1+ (caddr ListNb)) (cdddr ListNb)))) (0 0 1 0 0 0) Ou bien j'ai pas pas compris la question Apprendre => Prendre => Rendre
didier Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 Bonjour @DenisHen Tu ne prends pas la peine de regarder ce qui a déjà été fait (cette phrase a un petit air de répétition) (gile) a pourtant pris le soin de créer et de mettre à notre disposition plein de bibliothèques franchement terribles. Je te laisse chercher cette fonction "gc:SubstAt" pour admirer le travail partagé et le remercier. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Luna Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 Coucou, Regarde avec quelque chose comme ceci : (defun foo (lst fun val pos) (cond ( (null lst) lst) ( (zerop pos) (append (list (apply fun (vl-remove nil (list (car lst) val)))) (cdr lst))) ( (cons (car lst) (foo (cdr lst) fun val (1- pos)))) ) ) Pour ton exemple tu peux utiliser (setq ListNb (foo ListNb '+ 1 2)) (0 0 1 0 0 0) ou bien (setq ListNb (foo ListNb '1+ nil 2)) (0 0 1 0 0 0) Sachant que le premier élément de la liste correspond à l'index 0 Bisous, Luna
DenisHen Posté(e) le 27 juillet 2022 Auteur Posté(e) le 27 juillet 2022 @VDH-Bruno: merci pour ton aide. @didier : j'avais bien regardé les codes de Maître (gile), mais je ne pensais pas que cette commande me servirait, après ta remarque, j'ai approfondi et fini par trouver. Donc, un grand merci... @Luna : merci pour ton aide. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 27 juillet 2022 Auteur Posté(e) le 27 juillet 2022 Rebonjour. Voilà, je tente désespérément d'utiliser gc:SubstAt de Maître (gile). Mais ça me sort une erreur. Voici mon bout de code : (setq Text (str2lst Item ";")) (setq Pos (atoi (nth 0 Text))) (princ "\nPos=") (princ Pos) ;; Pos est un INTEGER (princ "\n(nth Pos ListNbTS)=") (princ (nth Pos ListNbTS)) (setq ele (+ (nth Pos ListNbTS) 1)) ;; ListNbTS est une LIST (princ "\nele=") (princ ele) ;; ele est un INTEGER (princ "\nDrapeau 03") (setq ListNbTS (gc:SubstAt (ele Pos ListNbTS))) (princ "\nDrapeau 04") Et voici le résultat dans ma ligne de commande : Citation Pos=1 (nth Pos ListNbTS)=0 ele=1 Drapeau 03; erreur: fonction incorrecte: 1 Sachant que ListNbTS ne contient, pour l'instant, que des 0, et non des "0". Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
VDH-Bruno Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 Un exemple de ce que tu as au départ et de ce que tu veux à l'arrivé? Que contient Item, Text ? Apprendre => Prendre => Rendre
VDH-Bruno Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 il y a une heure, Luna a dit : Coucou, Regarde avec quelque chose comme ceci : (defun foo (lst fun val pos) (cond ( (null lst) lst) ( (zerop pos) (append (list (apply fun (vl-remove nil (list (car lst) val)))) (cdr lst))) ( (cons (car lst) (foo (cdr lst) fun val (1- pos)))) ) ) Pour ton exemple tu peux utiliser (setq ListNb (foo ListNb '+ 1 2)) (0 0 1 0 0 0) ou bien (setq ListNb (foo ListNb '1+ nil 2)) (0 0 1 0 0 0) Sachant que le premier élément de la liste correspond à l'index 0 Bisous, Luna Bonjour Luna, Pour le retour et pour le jeu: (append (list (apply fun (vl-remove nil (list (car lst) val)))) (cdr lst)) J'aurais fait un (cons ..., plutôt qu'un (append (list ... et un (cons (car lst) (cond (val (list val)))) plutôt qu'un (vl-remove nil (list (car lst) val) ce qui aurait donné un: (cons (apply fun (cons (car lst) (cond (val (list val))))) (cdr lst)) Après c'est juste une écriture différente car je trouvais amusant pour l'exercice de vouloir gérer 1+ ou + en argument de fun, même si personnellement je ne l'aurais pas tenté et me serais contenté d'une écriture plus classique comme ceci: (defun foo (fun val ind lst) (cond ((null lst) nil) ((zerop ind) (cons ((eval fun) (car lst) val) (cdr lst))) ((cons (car lst) (foo fun val (1- ind) (cdr lst)))) ) ) $ (foo '+ 1 2 '(0 0 0 0 0 0)) (0 0 1 0 0 0) "Cha"lutations😉 1 Apprendre => Prendre => Rendre
DenisHen Posté(e) le 27 juillet 2022 Auteur Posté(e) le 27 juillet 2022 J'ai ma liste de base qui est ListNbTS qui ne contient que des 0 (zéro). J'aimerais ajouter 1 à un élément de cette liste à la position Pos. Si Pos=2, ListNbTS sera (0 0 1 0 0 ......) Ensuite, si dans ma boucle je retombe sur Pos=2, j'ajouterais 1 à l'élément à dette position, ListNbTS sera (0 0 2 0 0 ......) Et ainsi de suite... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
VDH-Bruno Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 _$ (setq ListNbTS '(0 0 0 0 0 0)) (0 0 0 0 0 0) _$ (setq ListNbTS (foo '+ 1 2 ListNbTS)) (0 0 1 0 0 0) _$ (setq ListNbTS (foo '+ 1 2 ListNbTS)) (0 0 2 0 0 0) _$ ou bien _$ (setq ListNb '(0 0 0 0 0 0)) (0 0 0 0 0 0) _$ (setq ListNb (cons (car ListNb) (cons (cadr ListNb) (cons (1+ (caddr ListNb)) (cdddr ListNb))))) (0 0 1 0 0 0) _$ (setq ListNb (cons (car ListNb) (cons (cadr ListNb) (cons (1+ (caddr ListNb)) (cdddr ListNb))))) (0 0 2 0 0 0) Qu'elle est le problème je comprend pas la question? Salutations 1 Apprendre => Prendre => Rendre
DenisHen Posté(e) le 27 juillet 2022 Auteur Posté(e) le 27 juillet 2022 Mille mercis Bruno. Ca fonctionne à merveille ! ! ! Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Luna Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 @VDH-Bruno vui la première écriture que j'avais testée c'était avec( (cons ((eval fun) ...) ...) Sauf que mon esprit n'a pas pu s'empêcher de penser à prévoir toujours un peu plus (encore et toujours) ^^" Du coup j'ai ensuite essayer de prévoir le coup avec les fonctions qui n'ont pas d'argument (et j'ai plus l'habitude de passer par (apply) dans ces cas là à cause de (ssget), lorsque j'ai travaillé sur ce principe à l'époque. Et du coup j'avais re-modifié une 3ème fois pour intégrer aussi les fonctions ayant un nombre variable d'arguments (avec val sous forme de liste). Bref, j'ai complexifié l'écriture de la fonction au fur et à mesure que j'écrivais mon message sur CADxp ^^" donc j'ai pas trop réfléchi à re-simplifier ensuite la façon d'y parvenir. Mais en théorie chat fonctionnait malgré tout >n< Bisous, Luna
VDH-Bruno Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 il y a une heure, Luna a dit : @VDH-Bruno vui la première écriture que j'avais testée c'était avec( (cons ((eval fun) ...) ...) Sauf que mon esprit n'a pas pu s'empêcher de penser à prévoir toujours un peu plus (encore et toujours) ^^" Du coup j'ai ensuite essayer de prévoir le coup avec les fonctions qui n'ont pas d'argument (et j'ai plus l'habitude de passer par (apply) dans ces cas là à cause de (ssget), lorsque j'ai travaillé sur ce principe à l'époque. Et du coup j'avais re-modifié une 3ème fois pour intégrer aussi les fonctions ayant un nombre variable d'arguments (avec val sous forme de liste). Bref, j'ai complexifié l'écriture de la fonction au fur et à mesure que j'écrivais mon message sur CADxp ^^" donc j'ai pas trop réfléchi à re-simplifier ensuite la façon d'y parvenir. Mais en théorie chat fonctionnait malgré tout >n< Bisous, Luna Oui oui ça fonctionnait bien et apply est une bonne habitude dans le cas d'un nombre d'argument variable... C'est juste que ça faisait longtemps que je n'avais tapé qq lignes de Lisp et ça me démangeait, donc je me suis fait plaisir. Amicalement Bruno Apprendre => Prendre => Rendre
Olivier Eckmann Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 Bonjour, Et pourquoi pas une liste de paire pointée pour un accès direct (setq lsNB (list (cons 1 0) (cons 2 0) (cons 3 0) (cons 4 0) (cons 5 0))) (defun AjoutAListe ( liste index nombre / ) (subst (cons index (+ nombre (cdr (assoc index liste)))) (assoc index liste) liste) ) ;Ajouter 2 à l'élément n° 3 (setq lsNB (AjoutAListe lsNB 3 2)) Olivier 1
VDH-Bruno Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 il y a une heure, DenisHen a dit : Mille mercis Bruno. Ca fonctionne à merveille ! ! ! @DenisHen, juste une petite observation au passage mais loin de moi l'idée de me poser en donneur de leçon, mais j'ai l'impression que tu butes souvent sur les mêmes problèmes, qui de mon point de vue n'ont rien avoir avec le langage de programmation que ce soit vba, lisp etc... Car bien souvent le problème se situe en amont, pour mon cas personnelle je passe en général plus de temps à exprimer clairement ce que je cherche à faire, plutôt qu'à le coder. Je te livre deux petites maximes bien connu que je me répète lorsque je bute sur un problème: La première: « Ce que l’on conçoit bien s’énonce clairement » Puis la seconde qui découle de la précédente: « Un problème bien posé est à moitié résolu ! » Et en général lorsque mon raisonnement répond à ces 2 maximes, le code s'écrit aisément. 1 Apprendre => Prendre => Rendre
DenisHen Posté(e) le 27 juillet 2022 Auteur Posté(e) le 27 juillet 2022 Merci Bruno pour ces précieux conseils. Je les observerais désormais. Mais c'est un exercice que je n'ai pas l'habitude de faire, il est vrai que je code avant d'avoir mon "cahier des charges" ou ma trame à suivre. Denis. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Curlygoth Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 moi je te rerererererererere-conseil de faire suivre tes codes d'un programme à un autre de les appeller ! XD plutot que de toujours créer/rechercher la même chose 😉 Mon site Web (en cours de construction) : Site DA-CODE de @didier
DenisHen Posté(e) le 27 juillet 2022 Auteur Posté(e) le 27 juillet 2022 Salut @Curlygoth, ça faisait longtemps... 😉 C'est ce que je commence à faire... J'ai maintenant plein de petites "routines" que j'appelle depuis d'autres... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 Il y a 3 heures, DenisHen a dit : je tente désespérément d'utiliser gc:SubstAt de Maître (gile). Mais ça me sort une erreur. _$ (gc:SubstAt 1 3 '(0 0 0 0 0)) (0 0 0 1 0) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 27 juillet 2022 Auteur Posté(e) le 27 juillet 2022 Bonjour @(gile), je sais pertinemment que ce que tu fais fonctionne parfaitement. Il y a juste que je n'y arrivais pas. Loin de moi l'idée d'incriminer tes codes 😉. Je me sert de pas mal des tes routines et c'est un régal... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 il y a 8 minutes, DenisHen a dit : Il y a juste que je n'y arrivais pas. As-tu compris pourquoi tu n'y arrivais pas ? C'est ça qui est important. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 27 juillet 2022 Auteur Posté(e) le 27 juillet 2022 Non, je n'ai pas compris pourquoi je n'y arrivais pas (et ça me désole), mais j'y arrive avec la solution de Bruno. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
VDH-Bruno Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 il y a 6 minutes, DenisHen a dit : Non, je n'ai pas compris pourquoi je n'y arrivais pas (et ça me désole), mais j'y arrive avec la solution de Bruno. Compare l'exemple donné par (gile): il y a 29 minutes, (gile) a dit : _$ (gc:SubstAt 1 3 '(0 0 0 0 0)) (0 0 0 1 0) Et la façon dont tu as appelé sa fonction dans ton code: Il y a 4 heures, DenisHen a dit : (setq ListNbTS (gc:SubstAt (ele Pos ListNbTS))) Que remarques tu? Apprendre => Prendre => Rendre
DenisHen Posté(e) le 27 juillet 2022 Auteur Posté(e) le 27 juillet 2022 Ok, je viens de piger, enfin je crois : (setq ListNbTS (gc:SubstAt ele Pos ListNbTS)) Toujours ce problème de parenthèses... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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