cours  |  td  |  examens  |  doc  |  liens  |  horaires
 Scheme

Université de Caen - UFR de Sciences
Deug MIAS-MASS
Marc Chemillier

Scheme - TD n° 7
9 avril 2003

Récursions sur les listes
Affichage d'un dessin




  • Exercices : (1h1/2)

    1. Faire (iota-carre n) calculant la liste des carrés (n2 ... 16 9 4 1)
      (define (iota-carre n)
       (cond ((= n 0) ())
             (else (cons (* n n) (iota-carre (- n 1))))))
      
    2. 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))))))
      
    3. 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))))))
      
    4. 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)))))
      
    5. 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)))))
      
    6. 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))))))
      
    7. 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))))))
      
    8. 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:
      pour 60 = 22 * 3 * 5 : (decompose 60 2) -> (2 2 3 5),
      pour 32 = 25 : (decompose 32 2) -> (2 2 2 2 2).
      (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))))))
      
    9. 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))))))
      

  • Avec machines : (1h1/2) Affichage d'un dessin


    cours  |  td  |  examens  |  doc  |  liens  |  horaires
     Scheme