[Lisp][Débutant] Récursivité incomplète
Bonjour,
Voici mon code :
Code:
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) )
)
) ) ) ) |
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)
"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