Scheme - TD n° 7
9 avril 2003
Récursions sur les listes
Affichage d'un dessin
(define (iota-carre n)
(cond ((= n 0) ())
(else (cons (* n n) (iota-carre (- n 1))))))
Faire (iota-leibniz n) calculant la liste :
| ( (-1)n | ... | 1 | -1 | 1 ) | 2n+1 | 5 | 3 |
(define (iota-leibniz n)
(cond ((= n 0) ())
(else (cons (/ (if (even? n) 1 -1) (+ (* 2 n) 1)) (iota-leibniz (- n 1))))))
Faire (iota-suite u0 n) calculant la liste (u0 u1 u2... un), où un est défini par un = racine carrée(un-1+1).
(define (iota-suite u0 n)
(cond ((= n 0) (list u0))
(else (cons u0 (iota-suite (sqrt (+ u0 1)) (- n 1))))))
Faire (our-member x l) qui donne #t si x appartient à l et #f sinon.
(define (our-member x l)
(cond ((null? l) #f)
((equal? x (car l)) #t)
(else (our-member x (cdr l)))))
Faire (nieme l n) qui donne le nième élément de l (comptés à partir de 0).
(define (nieme l n)
(cond ((null? l) ())
((= n 1) (car l))
(else (nieme (cdr l) (- n 1)))))
Faire (enleve x l) qui enlève tous les x de la liste l, d'abord au premier niveau, puis à tous les niveaux.
(define (enleve x l)
(cond ((null? l) ())
((equal? x (car l)) (enleve x (cdr l)))
(else (cons (car l) (enleve x (cdr l))))))
Faire (extrait-impair l) : (extrait-impair '(3 2 4 6 1 9)) --> (3 1 9)
(define (extrait-impair l)
(cond ((null? l) ())
((even? n) (extrait-impair (cdr l)))
(else (cons (car l) (extrait-impair (cdr l))))))
Faire une fonction (decompose n d) telle que l'appel (decompose n 2) calcule sous la forme d'une liste la décomposition en facteurs premiers de l'entier n, les facteurs premiers étant disposés en ordre croissant, et apparaissant autant de fois que leur exposant dans la factorisation de n (Partiel 94). Exemple:
(define (diviseur-suivant n d)
(cond ((= (remainder n d) 0) d)
(else (diviseur-suivant n (+ d 1)))))
(define (decompose n d)
(cond ((= n 1) ())
(else (let ((d (diviseur-suivant n d)))
(cons d (decompose (quotient n d) d))))))
Faire (reverse l) en utilisant uniquement cons, car, cdr, et sans variable auxiliaire.
(define (reverse l)
(cond ((or (null? l) (null? (cdr l))) l)
(else (cons (car (reverse (cdr l)))
(reverse (cons (car l)
(reverse (cdr (reverse (cdr l))))))))))
(define (our-reverse l)
(cond ((null? l) ())
(else (append (our-reverse (cdr l)) (list (car l))))))
On copiera le contenu de ce fichier, et on l'insèrera dans la fenêtre Définition de DrScheme, pour en faire une liste l1.
Essayez ces autres fichiers de dessin :
... et regardez les belles images correspondantes.