Bonjour,
Voici mon code :
J'envoie une liste l à "calcul" de type ( ( (2 3) (3 5) (3 5) ) ( (3 6) (6 2) (3 5) ) ), un argument p = 6, et un lro = car(car l)
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 (define (calcul p l lro ) (cond ((null?( car l)) lro) (else calcul p (cdr l) (add p (car l) (cons(car (car l)) () ) (addr lro) lro) ) ) ) (define (add p ltc lto lrc lro) (cond ((or (null? (cdr ltc)) (> (+ (car (car ltc)) (car (car (cdr ltc)))) p)) (cond ((> (car (cdr (car ltc))) (car(cdr (car lrc)))) lto) (else lro ))) (else (add p (append (cons (cons (+ ( car (car ltc) ) (car (car (cdr ltc)))) (cons (+ (car (cdr (car ltc))) (car (cdr (car (cdr ltc))))) ()) )()) (cdr (cdr ltc))) (append (cons (car (cdr ltc)) () ) lto) lrc lro)))) ( define (addr ltc) (cond ( (null? (cdr ltc) ) ltc) (else (addr ( append ( cons ( cons ( + ( car (car ltc) ) (car (car (cdr ltc) ) ) ) (cons (+ (car (cdr (car ltc) ) ) ( car (cdr (car (cdr ltc) ) ) ) ) ()) ) () ) (cdr (cdr ltc) ) ) ) ) ) )
"Add" et "addr" font bien leur travail. Mais dès la premiere fois où le programme rentre dans addr, l'interpréteur me renvoie lro ou lto (suivant le cas) alors qu'elle doit normalement le renvoyer à la fonction calcul afin de continuer la récursivité. Comme d'habitude, je ne vois pas le problème...
Merci
Partager