Aller au contenu

Messages recommandés

Posté(e)

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

 

Posté(e)

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

Posté(e)

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

Posté(e)

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?

Posté(e)

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

Posté(e)

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

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

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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)

Posté(e)

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

Posté(e)

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)

Posté(e)

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

Posté(e)

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)

  • 2 semaines après...
Posté(e)

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

Posté(e)

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)

Posté(e)

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

Posté(e)

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

Posté(e)

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 :rolleyes:

 

Pour info je suis originaire de l'Oise et j'habite dans la région Creilloise

 

A+

Apprendre => Prendre => Rendre

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é