Pourquoi utiliser (aussi) des langages fonctionnels au lycée ?
L'algorithmique fait une entrée remarquée dans le nouveau programme de Seconde. Il y est
fait clairement mention de l'apprentissage de l'affectation, des entrées-sorties et des boucles
comme allant de soi, ce qui sous-entend que seule existe la programmation impérative.
Cependant la programmation fonctionnelle est une alternative beaucoup plus proche des
mathématiques et de leur enseignement dans le secondaire. Nous verrons dans quelle mesure
l'enseignement de l'algorithmique via les langages fonctionnels est moins perturbante pour
l'élève et le professeur n'ayant pas reçu de formation récente en algorithmique.
Cet article a été repris dans Repères-Irem n° 81
I. Programmation impérative / Programmation fonctionnelle
I.1 Conventions
L'objet de cet article n'est pas d'envisager ces deux modes de programmation avec le point de vue de l'informaticien
cherchant la méthode la plus rapide mais avec celui d'un professeur de mathématiques s'adressant à des élèves
débutants dans ce domaine [1]. Nous ne parlerons pas d'un logiciel en particulier. Cependant, pour les applications
pratiques, nous utiliserons XCAS [2], logiciel multifonctions spécialement conçu pour être utilisé en classe de
mathématiques et OCAML [3], logiciel utilisant la programmation fonctionnelle.
I.2 Programmation impérative
La programmation impérative est la plus répandue (Fortran, Pascal, C,...) et la plus proche de la machine réelle. Son
principe est de modifier à chaque instant l'état de la mémoire via les affectations. Ce mode de programmation
présente plusieurs défauts pour un lycéen :
- il s'éloigne des mathématiques en utilisant l'affectation comme base de programmation. Une même variable peut
prendre des valeurs tout à fait différentes selon le moment où on l'évalue alors qu'un élève de seconde découvre les
fonctions qui à un nombre donné associe une unique image ;
- la mémoire est constamment modifiée par le programme : le programmeur doit à chaque instant connaître son état
pour savoir ce que représentent les variables affectées ;
- on est obligé de créer des variables temporaires pour que certaines zones de la mémoire restent dans un certain
état : cela est source de nombreux bogues dus à une mauvaise maîtrise de la chronologie des affectations.
Prenons l'exemple très simple d'un programme déterminant le successeur d'un entier. Une case mémoire nommée n
reçoit comme valeur 1 :
n:=1:;
Écrivons une fonction plus_n qui ajoute k à n :
Copyright © Les nouvelles technologies pour l'enseignement des mathématiques Page 2/18