x_all Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 (doublon (cdr lstR)) quand même j'aurai pu la voir celle là...J'ai essayer de comprendre la solution de Gégé, ... ben j'y arrive pas. et puis c'est quoi cette commande (listp dont je n'avais jamais entendu perler... j'ai beau lire l'aide je comprend pas à quoi ça sert.''Verifies that an item is a list'' mais en lisp tout est liste non? oui je sais je fait mon ronchon il y a les atomes... quelques trucs sur autocad
GEGEMATIC Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 Salut,@GEGEMATIC, on doit pouvoir supprimer certaines redondancesOui mais il était tard, il fallait que je rentre !ci dessous un peu plus concis, mais j'utilise presque toujours le cond, comme ça je sais que je suis directement près à avoir plus de 2 éventualités. Souvent je programme des traitements dans l'urgence, sans avoir eu le temps de faire une analyse correcte, donc "cond"d'ailleurs, ce challenge, c'est plus une histoire d'analyse que de récursivité. (defun doublon (lst) (if (and lst (listp lst) ) (if (member (car lst) (cdr lst)) t (doublon (cdr lst)) ) ) ) ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
x_all Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 écrit comme ça je comprend.(listp lst) équivaut à (if (/= nil (cdr lst))en fait on fait pareil.. mais c'est plus joli avec ta tournure.. quelques trucs sur autocad
Patrick_35 Posté(e) le 1 juin 2018 Auteur Posté(e) le 1 juin 2018 Bonjour Bravo pour vos efforts :D @gégéComme le dis (gile), tu as réussi et c'est le principal. Quelle satisfaction de réussir ce type de challenge car ce qui est énervant, c'est que l'on sent que la solution n'est pas loin, mais qu'on n'y arrive pas.On a beau essayer de passer à autre chose, mais quand ça trotte dans un coin de la tête ;)On peut aussi optimiser encore un peu(defun doublon (lst) (and lst (if (member (car lst) (cdr lst)) t (doublon (cdr lst)) ) ) ) @x_allTu y es presque, ta fonction ne marche pas avec par exemple (doublon '(1 2 3 4 5 2 6 7 8 9 3)) @FraidEncore un effort, et avec les exemples postés, cela peut t'orienter. Bien vu (gile) avec vl-some. j'ai fais une fonction proche de celle de Bonus, mais en récursif et moins bien que celle de gégé(defun doublon(lst / dbl) (defun dbl(lst) (if lst (cons (vl-position T (mapcar '(lambda(x) (equal (car lst) x)) (cdr lst))) (dbl (cdr lst))) ) ) (not (apply '= (dbl lst))) ) (defun doublon(lst / dbl) (defun dbl(lst) (if lst (cons (equal (length (vl-remove (car lst) lst)) (1- (length lst))) (dbl (cdr lst))) ) ) (not (apply '= (dbl lst))) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
x_all Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 harf... j'étais à 2 doigts... je vais voir ça... j'avoue que je capte pas pourquoi il passe par le 2eme If..Ou est l'embrouille?c'est vrai ce ce pb disparait avec un (case (defun doublon (lstR / rep) (setq i (+ 1 i)) (if (and (cdr lstR) (member (car lstR) (cdr lstR))) (setq rep T) (if (/= nil (cdr lstR)) (doublon (cdr lstR ) ) ) ) rep ) Psje sais pas ce qui se passe, mais j'ai des soucis de copier coller avec indentation... j'ai des saut de ligne qui se barrentje suis le seul? quelques trucs sur autocad
Patrick_35 Posté(e) le 1 juin 2018 Auteur Posté(e) le 1 juin 2018 A mon avis, le problème se situe dans le retour de la fonction avec la variable rep @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 Coucouj'enrage de me sentir isolén'étant pas capable de proposer une solution je ne suis pas capable d'appliquer la récursivité, un point c'est tout, putain ça fait mal ! Éternel débutant... Mon site perso : Programmer dans AutoCAD
lecrabe Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 Hello DidierCOOL / ZEN : tu peux tres bien atteindre la Retraite en Mode NON Recursif ! Bon WE, Bye, lecrabe Autodesk Expert Elite Team
(gile) Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 Dans l'esprit des réponses de GEGEMATIC, x_all et Fraid : (defun doublon (l) (cond ((null l) nil) ((member (car l) (cdr l)) T) (T (doublon (cdr l))) ) ) Ou, plus élégant : (defun doublon (l) (or (member (car l) (cdr l)) (and l (doublon (cdr l))) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 1 juin 2018 Auteur Posté(e) le 1 juin 2018 Salut Didier Je suis d'accord avec lecrabe. Tu peux très bien vivre sans le récursif. Tu peux aussi essayer celui-ci. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 Coucounon je me sens vraiment out et j'en peux plus, désoléma première idée tout de suite est d'effacer toutes mes traces sur le net, je résiste mais combien de temps ? Éternel débutant... Mon site perso : Programmer dans AutoCAD
Patrick_35 Posté(e) le 1 juin 2018 Auteur Posté(e) le 1 juin 2018 (defun doublon (l) (or (member (car l) (cdr l)) (and l (doublon (cdr l))) ) )Quand on le voit, cela parait tellement simple.Encore faut-il l'écrire.Je n'ai qu'un mot : respect Merci Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 1 juin 2018 Auteur Posté(e) le 1 juin 2018 Tu nous fais un petit coup de grisou ? Allez Didier, tu apportes tellement autrement. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 Coucoule grisou a pris feu,c'est trop tard Éternel débutant... Mon site perso : Programmer dans AutoCAD
x_all Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 pouh lalaen fait c'est vrai que c'est la variable de retour qui doit être réinitialisée quand le récursivité remonte pour sortir car elle est déclaré en local dans (doublon)?ou alors ça restera un mistèrePour me passer de variable il a fallu que je me creuse...mais bon j'ai lu la réponse de (gile) tout est dit, mon code est trop moche pour être posté ... quelques trucs sur autocad
DenisHen Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 j'enrage de me sentir isolén'étant pas capable de proposer une solution je ne suis pas capable d'appliquer la récursivité, un point c'est toutNon didier, tu n'es pas seul... Et tu restes fort utile sur plein d'autres sujets... ;) PS : tu ne formates plus tes messages ? 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)
GEGEMATIC Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 Coucoule grisou a pris feu,c'est trop tardBon dieu Didier,j'essaye de retrouver le 1er programme récursif que j'ai vu, (en 1991 ...)c'était un copain Marocain qui l'avait fait,par la suite j'ai dû le ré-écrire sans récursion car son usage faisait qu'il dépassait souvent la pile.mais il était tellement limpide que tout de suite on comprenait. je cherche depuis 20mn, pas moyen !Grr ! ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
DenisHen Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 Re. Juste une petite question, la récursivité se reconnait-elle par une commande (ou fonction) qui fait appel à elle-même ? Est-ce sa seule particularité ? 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 1 juin 2018 Posté(e) le 1 juin 2018 Re. Juste une petite question, la récursivité se reconnait-elle par une commande (ou fonction) qui fait appel à elle-même ? Est-ce sa seule particularité ? Oui, mais on ne parle pas que de fonctions, on peut parler aussi de structure récursive (arborescences, fractales) : - un dossier contient potentiellement des fichiers et des dossiers- une liste de données LISP (liste chaînée) est : soit une liste vide ; soit une donnée (car) et un pointeur vers une liste de données (cdr). Schématiquement : () | (cons x lst). On parle aussi de définition récursive pour le LISP : une expression LISP est : soit un atome ; soit une liste d'expressions LISP. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 1 juin 2018 Posté(e) le 1 juin 2018 Merci (gile)... Structure Ouroboros ? ;) C'est d'un niveau encore loin pour moi... J'ai lu plusieurs de tes routines et j'ai mal au crane quand je tombe dessus... :( Trop bien écrites, trop "concises", trop efficaces... ;) C'est pas pour les novices... Dont je fais parti... :( 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 15 juin 2018 Posté(e) le 15 juin 2018 Bonjour, Sur ce challenge la porte du récursif ayant été verrouillé par les précédents intervenants. On peut s'autoriser une petite optimisation (si on est pas trop attaché au style) sur "la solution hors sujet" en économisant des parcours sur la liste du au 2ème member dans (member x (cdr (member x l))). vl-some comme mapcar étant des fonctions d'ordre supérieur, a l'appel de ces fonctions l'argument liste est chargé en mémoire, on peut donc à chaque itération "muter" son état dans la fonction argument en écrivant ceci: (defun doublon (l) (or (vl-some '(lambda (x) (member x (setq l (cdr l)))) l)) ) A+ Bruno Apprendre => Prendre => Rendre
DenisHen Posté(e) le 15 juin 2018 Posté(e) le 15 juin 2018 Je suis sûr que "VDH" veut dire "récursif" dans une langue... ;) 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 15 juin 2018 Posté(e) le 15 juin 2018 Je suis sûr que "VDH" veut dire "récursif" dans une langue... ;)Perdu ce sont les initiales de mon nom de famille qui en langue flamande peut ce traduire par "de la lande" ;) Apprendre => Prendre => Rendre
DenisHen Posté(e) le 15 juin 2018 Posté(e) le 15 juin 2018 ...en langue flamande...Un belge... Quel plaisir... Mes grands parents paternels étaient belge... ;)Mon nom est d'origine belge... Hennuyer, c'était les habitants du Hainaut... 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 15 juin 2018 Posté(e) le 15 juin 2018 Un belge... Non du tout, même si je serais lundi et mardi du coté de Bruxelles pour le travail. Pour l'anecdote les Flandres ça existe aussi en France Pour info je suis originaire de l'Oise et j'habite dans la région Creilloise 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