Aller au contenu

Challenge récursive.


Messages recommandés

(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...

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

@GEGEMATIC, on doit pouvoir supprimer certaines redondances

Oui 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.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

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_all

Tu y es presque, ta fonction ne marche pas avec par exemple (doublon '(1 2 3 4 5 2 6 7 8 9 3))

 

@Fraid

Encore 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

 )

Ps

je sais pas ce qui se passe, mais j'ai des soucis de copier coller avec indentation... j'ai des saut de ligne qui se barrent

je suis le seul?

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

pouh lala

en 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ère

Pour 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é ...

Lien vers le commentaire
Partager sur d’autres sites

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 tout

Non 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)

Lien vers le commentaire
Partager sur d’autres sites

Coucou

le grisou a pris feu,c'est trop tard

Bon 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.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

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

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

...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)

Lien vers le commentaire
Partager sur d’autres sites

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é