Académique Documents
Professionnel Documents
Culture Documents
Programmation fonctionnelle
Laboratoire 5
Tests, fonctions récursives, fonctions d’ordre supérieur
Objectifs
• Écriture de tests unitaires
• Définition de fonctions récursives
• Définition de fonctions d’ordre supérieur
Plusieurs librairies sont disponibles dans Dr Racket pour écrire des tests unitaires. Les
fonctions de tests sont équivalentes et utilisent généralement les mêmes noms.
Voici une première librairie simple qui permet de faire des tests
https://docs.racket-lang.org/test-engine/index.html#%28mod-path._test-
engine%2Fracket-tests%29
#lang racket
(require test-engine/racket-tests) ; https://docs.racket-
lang.org/test-engine/index.html#%28mod-path._test-
engine%2Fracket-tests%29
(define (fact n)
(if (= n 0)
1
(* n (fact (- n 1)))))
(check-expect (fact 0) 1)
(check-expect (fact 3) 6)
(check-expect (fact 4) 24)
(check-member-of (* 2 2) 1 4 9 16)
1
(check-range (* 2 2) 0 100)
Pour écrire des tests unitaires dans les règles de l’art (comme vous l’avez appris dans
IFT232), vous pouvez utiliser la librairie RackUnit https://docs.racket-
lang.org/rackunit/index.html
#lang racket
(require rackunit rackunit/gui)
(test/gui
(test-suite
"all tests"
(test-suite
"math tests"
(test-case "addition" (check-equal? (+ 1 1) 2))
(test-case "subtraction" (check-equal? (- 0 0) 0))
(test-case "multiplication" (check-equal? (* 2 2) 5)))
(test-suite
"string tests"
(test-case "append" (check-equal? (string-append "a"
"b") "ab"))
(test-case "ref" (check-equal? (string-ref "abc" 1)
#\b)))))
• Écrire une fonction qui calcule la somme des carrées de tous les nombres
premiers entre n et m. Pour cela, utiliser les fonctions d’ordre supérieur que nous
avons vu en cours et que vous avez programmé dans le laboratoire 4.
• Écrire des tests unitaires pour cette fonction.
2
Exercice 2 : Fonctions récursives et itératives
Le but de l’exercice est d’afficher un losange centré dans une fenêtre de 79 caractères de large.
La fonction affiche à l’écran un losange rempli de « x » et dont la longueur du côté du losange est
égale à « long ».
Exemple : (losange 4) affichera :
x
xxx
xxxxx
xxxxxxx
xxxxx
xxx
x
Le losange est centré au milieu d’un écran de largeur de 79 caractères. Le losange ne s’affiche
que si le nombre « long » ne provoque pas l’affichage d’une ligne plus grande que 79 caractères.
Vous devez implanter les 2 fonctions losange dont une implante le processus itératif (tail
récursive) et l’autre le processus récursif.
Vous devrez construire votre propre fonction d’impression de la ligne et ne pas utiliser
makestring ou toute autre fonction de Dr-Racket
Vous devez vérifier la validité des paramètres d’appel des fonctions losange. Si ceux-ci ne sont
pas valides, vous afficherez le message :
Données invalides
De même, si le côté est trop grand vous afficherez :
Losange trop grand
Lorsque le côté est de 0, vous passerez seulement une ligne.
Après l’affichage de votre losange, il n’y aura aucun retour de ligne supplémentaire. Donc la
dernière ligne d’un losange de côté plus grand que 0 doit afficher 1 seul « x »