Bonjour,
Je suis actuellement un cours sur la récursivité en Scheme, et je galère un peu sur les arbres. Je suis sur une fonction qui rend une liste des valeurs en ordre postfixe (les feuilles avant la racine).
Voilà ma fonction :
1 2 3 4 5 6
| (define (liste-postfixe B)
(if (ab-noeud? B)
(cons (liste-postfixe (ab-gauche B))
(cons (liste-postfixe (ab-droit B))
(ab-etiquette B)))
'())) |
que j'applique à cet arbre :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| (liste-postfixe (ab-noeud 1
(ab-noeud 2
(ab-noeud 4
(ab-noeud 9 (ab-vide) (ab-vide) )
(ab-noeud 3 (ab-vide) (ab-vide)))
(ab-noeud 5
(ab-noeud 3 (ab-vide) (ab-vide) )
(ab-noeud 0 (ab-vide) (ab-vide))))
(ab-noeud 3
(ab-noeud 6
(ab-noeud 2 (ab-vide) (ab-vide) )
(ab-noeud 3 (ab-vide) (ab-vide)))
(ab-noeud 7
(ab-noeud 6 (ab-vide) (ab-vide) )
(ab-noeud 8 (ab-vide) (ab-vide ) ))))) |
et voilà le résultat :
((((() () . 9) (() () . 3) . 4) ((() () . 3) (() () . 0) . 5) . 2) (((() () . 2) (() () . 3) . 6) ((() () . 6) (() () . 8) . 7) . 3) . 1)
Il s'agit bien des valeurs en ordre postfixe mais comme vous le voyez, il y a pas mal de bordel en plus, ce qui est lié certainement à un "cons" en trop ou mal placé, mais pour l'instant je ne vois pas comment faire autrement.
Quelqu'un connaissant le scheme a-t-il une idée ?
Mercie d'avance.
Partager