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

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

Scheme - TD n° 10
9 mai 2001

Récursions terminales




  • Exercices : (1h1/2)

    1. Faire en version terminale la fonction (our-reverse l) qui inverse une liste.
      (define (our-reverse l)
        (define (aux l res)
          (cond ((null? l) res)
                (else (aux (cdr l) (cons (car l) res)))))
        (aux l '()))
      
    2. Faire en version terminale la fonction (iota n) qui fabrique la liste (n ... 3 2 1).
      (define (iota n)
        (define (aux k res)
          (cond ((> k n) res)
                (else (aux (+ k 1) (cons k res)))))
        (aux 1 '()))
      
    3. Faire en version terminale la fonction (maximum l) qui calcule le maximum d'une liste de nombres.
      (define (maximum l)
        (define (aux l var)
          (cond ((null? l) var)
                (else (aux l (max (car l) var)))))
        (aux (cdr l) (car l)))
      
    4. Faire en version terminale la fonction (enleve x l) qui enlève toutes les occurrences de x dans l.
      (define (enleve x l)
        (define (aux l res)
          (cond ((null? l) (reverse res))
                (else (aux (cdr l)
                           (if (equal? (car l) x)
                               res
                               (cons x res))))))
        (aux l '()))
      
      (define (enleve x l)
        (define (aux l res)
          (cond ((null? l) res)
                (else (aux (cdr l)
                           (if (equal? (car l) x)
                               res
                               (append res (list x)))))))
        (aux l '()))
      
    5. Faire l'interface suivant avec une action des boutons consistant à écrire dans le texte "Bouton1" ou "Bouton2" selon le bouton sur lequel on clique :

      
      (define w (make-object frame% ""))
      (send w show #t) 
      
      (define (action o e)
        (send t set-value (send o get-label)))
      
      (define b1 (make-object button% "Bouton1" w action))
      (define t (make-object text-field% "Texte" w void))
      (define b2 (make-object button% "Bouton2" w action))
      
      

  • Avec machines : (1h1/2) suite du dessin de fichier BMP


  • Avec machines : (1h1/2) Crible d'Eratosthène (versions simple et terminale)

    1. Faire une fonction (filtrer liste d) qui enlève d'une liste de nombres tous ceux qui sont multiples de d.

    2. Pour obtenir tous les nombres premiers inférieurs à n, on part de la liste (2 3 4 5 ... n) et on enlève tous les multiples de 2 (2 non-compris), puis on recommence avec la liste restante et les multiples de son premier élément (c'est-à-dire 3), et ainsi de suite. Faire la fonction (crible liste) qui réalise l'opération.

    3. Optimiser la fonction en introduisant la racine carrée de n.

      Fonctions d'écriture dans un fichier:
      (open-output-file <fich>) -> ouvre le fichier de nom <fich> et renvoie un port.
      (display <quelquechose> <port>) -> écrit en direction de <port>
      (close-output-port <port>) -> ferme le port.