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:
Code :
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))))) |
ainsi que deux sélecteurs:
Code :
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) |
ma question est la suivante: la liste linéaire de tous les titres écrits par l’auteur athor-name0 :
voici ma version brute:
Code :
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)))))) |
cette solution me donne des résultats correctes mais avec des listes vides