Problème récursivité

Résolu/Fermé
debmaths - 28 févr. 2011 à 11:25
debmaths Messages postés 3 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 7 avril 2011 - 1 mars 2011 à 06:01
Bonjour,

Au secours !! Je craque !! Je débute en Scheme. Je me bats depuis 4 jours sur un exercice d'entrainement. Si j'arrivais à comprendre celui_ci je pense que je comprendrais plus facilement la récursivité:
;;; corrigesimple: liste (number ) ---> liste (number)
;;; vérifier l'ordre croissant des chiffres
;;; si 2 nombres sont en ordre inverse, les permuter. Uniquement les 2 premiers
(define (corrigeSimple L)
(if (and (pair? L) (pair? (cdr L)))
(let ((k (cons (car L) (corrigeSimple (cdr L)))))
(if (> (car L) (cadr L))
(((cons (cadr L) (list (car L))))
k)
k))
(list (car L))))

(trace corrigeSimple) (corrigeSimple (list 1 3 5 7 9))

Ma définition fonctionne lorsque les nombres de la liste sont en ordre croissant sinon je me plante!!
Merci pour votre aide






1 réponse

debmaths Messages postés 3 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 7 avril 2011
1 mars 2011 à 06:01
J'ai trouvé enfin la solution:

;;; corrigesimple: liste (number ) ---> liste (number)
;;; vérifier l'ordre croissant des chiffres
;;; si 2 nombres sont en ordre inverse, les permuter. Uniquement les 2 premiers
(define (corrigeSimple L)
(if (and (pair? L) (pair? (cdr L)))
(if (< (car L) (cadr L))
(cons (car L) (corrigeSimple (cdr L)))
(cons (cadr L) (cons (car L) (cddr L))))
(list (car L)))) ;; (car L) dernier de la liste ou alors mettre L car reste le dernier de la liste
(trace corrigeSimple) (corrigeSimple (list 2 7 5 10 9))

Maintenant on me demande : à partir de cette définition mettre dans une liste tous les nombres en ordre croissant. C'est-à-dire qu'après (cons (cadr L) (cons (car L) (cddr L)) il faut relancer (corrigeSimple L) avec la nouvelle liste. Et là vraiment je n'ai aucune solution, je suis sec.
Quelqu'un peut-il m'aider ?? Au secours.
Mzerci d'avance
0