Bonjour,
Cela fait longtemps que je ne vous ai pas sollicité !! Pouvez-vous m'aider SVP car je me casse la tête depuis une semaine pour afficher un arbre binaire avec reduce et map. J'ai pris un exercice sur un livre Scheme que j'ai essayé d'adapter à mon problème.
Est-ce que c'est ma logique générale qui est fausse ou le mauvais emploi de la combinaison reduce-map ? J'ai fait je ne sais combien de tests dans tous les sens, rien à faire.
Bonnes Pâques
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 ;; ab-vide? : ArbreBinaire (alpha) -> bool ;;; (ab-vide? B) rend vrai ssi B est un arbre vide et faux sinon (define (ab-vide? B) (not (ab-noeud? B))) ;;; ab-noeud? vrai si B non vide donc avec Not, vrai si vide ;;; paragraphe : LISTE[Ligne] -> Paragraphe ;;; (paragraphe L) rend le paragraphe formé des lignes de la liste L (define (paragraphe L) (if (pair? L) (string-append (car L) (paragraphe (cdr L))) "")) (define (->string e) (cond ((number? e) (number->string e)) ((symbol? e) (symbol->string e)) (else e))) ;;; ab-B2 : -> ArbreBinaire (string) ;;; (ab-B2) rend l'arbre B2 (define (ab-B2) (let* ((B1 (ab-noeud "f" (ab-vide) (ab-vide))) (B2 (ab-noeud "g" (ab-vide) (ab-vide))) (B1-1 (ab-noeud "c" (ab-vide) (ab-vide))) (B3 (ab-noeud "e" B2 (ab-vide))) (B4 (ab-noeud "d" B3 B1)) (B5 (ab-noeud "b" B1-1 B4))) (ab-noeud "a" B5 (ab-vide)))) (define (ab-affichage B) ;; aff-arbre : ligne ->Ligne ;; (aff-arbre) rend la ligne obtenue en ajoutant un tiret devant "ligne" (define (aff-arbre pref B) (let ((pref2 (string-append pref "-"))) (define (aff-arbre-pref2 B) (aff-arbre pref2 B)) ;; expression de (ab-affichage B): (if (ab-vide? B) (paragraphe '("vide")) ; expression de (aff-arbre-pref B) (string-append (string-append pref (->string (ab-etiquette B))) (reduce string-append (paragraphe '()) (map aff-arbre-pref2 (ab-gauche B))))))) (aff-arbre "" B)) (trace ab-affichage) (ab-affichage (ab-B2))
Partager