Bonjour,
j'ai un probleme que j'ai du mal à le résoudre et je vaudrais votre aide, il s'agit d'un arbre binaire destiné à classer les ouvrages d’une bibliographie, cet arbre (BTREE) est organisé de cette manière:
- soit arbre vide
- soit la donnée:
- une clé: identifiant un livre
- d’un nom d’auteur
- un titre
- deux branches, gauche et droite, qui sont des objets de type BTREE
voici le constructeur du BTREE:
ainsi que deux sélecteurs:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 (define (mk-btree key-0 name-0 title-0 lbr-0 rbr-0) ;; STRING,STRING,STRING ,BTREE,BTREE -> BTREE ;; Retourne un arbre bibliographique non vide à partir des données qui le ;; composent. (cons key-0 (cons name-0 (cons title-0 (cons lbr-0 rbr-0)))))
ma question est la suivante: la liste linéaire de tous les titres écrits par l’auteur athor-name0 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 (define author-name ;; BTREE -> STRING ;; Retourne le nom de l'auteur du livre placé à la racine d'un arbre ;; bibliographique non vide. cadr) (define title ;; BTREE -> STRING ;; Retourne le titre du livre placé à la racine d'un arbre bibliographique ;; non vide. caddr)
voici ma version brute:
cette solution me donne des résultats correctes mais avec des listes vides
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 (define (titles-for-author author-name0 btree) (if (empty-tree? btree) '() (if (equal? author-name0 (author-name btree)) (cons (title btree) (cons (titles-for-author author-name0 (left-branch btree)) (titles-for-author author-name0 (right-branch btree)))) (cons (titles-for-author author-name0 (left-branch btree)) (titles-for-author author-name0 (right-branch btree))))))
Partager