(define (triangle-pascal-line-iter li)
(if (null? (cdr li)) (list 1)
(cons (+ (car li) (cadr li) ) (triangle-pascal-line-iter (cdr li)))))
(define (triangle-pascal-line li) (cons 0 (triangle-pascal-line-iter li)))
(define (triangle-pascal-iter n acc line)
(if (= 0 n) acc (let ((line2 (triangle-pascal-line line))) (triangle-pascal-iter (- n 1) (cons line2 acc) line2))))
(define (triangle-pascal n)
(triangle-pascal-iter n (list) (list 0 1)))
Remarque :
pour 5, ca renvoie :
((0 1 5 10 10 5 1) (0 1 4 6 4 1) (0 1 3 3 1) (0 1 2 1) (0 1 1))
(la fonction les liste a l'envers, pour pouvoir etre tail-rec)