J'arrive à la fin de mon cours et je me trouve sec devant 2 problèmes sur les arbres binaires. Je n'ai aucune hypothèse et le ou les erreurs doivent être énormes:
-- 1er problème. Impossible de tester la présence ou d'une feuille
La réponse est n(importe quoi !!!!

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
;;; 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))))

;;; ab-B1 : --> ArbreBinaire (nat)
;;; (ab-B1) rend l'arbre B1
(define (ab-B1)
  (let* ((B1 (ab-noeud 44 (ab-vide) (ab-vide)))
         (B2 (ab-noeud 36 (ab-vide) (ab-vide)))
         (B1-2 (ab-noeud 154 (ab-vide) (ab-vide)))
         (B2-2 (ab-noeud 22 (ab-vide) (ab-vide)))
         (B3 (ab-noeud 2 B1 (ab-vide)))
         (B4 (ab-noeud 2 B2-2 B2))
         (B5 (ab-noeud 15 (ab-vide) B1-2))
         (B6 (ab-noeud 99 B5 B3)))
    (ab-noeud 1 B4 B6)))

;;; ab-feuille? : AbreBinaire (alpha) -> bool
;;; (ab-feuille? B) rend vrai ssi B est une feuille
    
(define (ab-feuille? B)                 ;;; vrai si B est une feuille
    (and (not (pair? (ab-gauche B)))  ;;; ab-gauche vide
         (not (pair? (ab-droit B))))) ;;; ab-droit vide
    
  (ab-feuille? (ab-B1))
; (ab-feuille? (ab-noeud "e" "g" (ab-vide)))


---2ème problème : impossible de créer un arbre binaire

(define (ab-vide? B)
  (not (pair? B)))


;;; Liste (élèmentsquelconques ) --> liste ( etiq , arbre vide gauche, noeud à droite)
;;; si liste vide arbre vide 
  
  (define (liste2arbre L)
     (if (and (pair? L) (pair? (cdr L)) )
       (let* ((a-etiquette (car L))
             (a-droit (cadr L))
             (k (liste2arbre (cdr L) )))
       (cons (ab-noeud a-etiquette () a-droit) k)) 
     (list (ab-noeud (car L) () ()))))
  
  (define (xxxx L)
    (let ((p (liste2arbre L)))
      
  (define (ab-nombre-noeuds x)     
  (if (ab-vide? x)
      0
      (+ 1 (ab-nombre-noeuds (ab-gauche x))
         (ab-nombre-noeuds (ab-droit x)))))
      
  (ab-nombre-noeuds p)))
  
 (trace xxxx) (trace liste2arbre)  (xxxx (list "1" "2" "3"))

;;; REPONSE :  procedure application: expected procedure, given: #<procedure:self> #<procedure:self> #<procedure:self>); arguments were: get-left
Pouvez-vous m'aider SVP car là je n'ai aucune hypothèse de recherche. Merci d'avance.