Plan de cours IFT 359 – Programmation fonctionnelle Été 2013
30-04-2013 2
1 Présentation
1.1 Mise en contexte
Le cours IFT 359 introduit les étudiants à la programmation fonctionnelle. Celle-ci a débuté avec le langage Lisp
créé par J. McCarthy en 1958, dans les mêmes années où les langages de haut niveau supportant la programmation
impérative (procédurale/structurée) tels que Fortran (1957) et Algol (1958) en étaient à leurs débuts. Tandis que la
programmation impérative est basée sur un modèle où un état change en fonction des opérations effectuées (machine
de Turing), ce qui est très proche de l’implémentation physique (registres, mémoire, jeu d’instructions de l’UCT,
etc.), la programmation fonctionnelle est basée sur un modèle mathématique (lambda calcul) dans lequel une
fonction, souvent récursive, prend une entrée et calcule une sortie. La programmation fonctionnelle, restée dans
l’ombre de la programmation impérative, refait maintenant surface, car ses propriétés sont très utiles pour faire face
à certains problèmes actuels (e.g. LINQ, MapReduce) notamment dans la programmation parallèle sur de multiples
cœurs. Dans le cadre du cours, nous allons étudier le langage Haskell. Plus particulièrement, nous allons utiliser la
plateforme Haskell (http://www.haskell.org/platform/). Le langage Haskell (1990 et 1998) a été développé
pour consolider les acquis des dernières décennies. Il se différencie de Lisp par son typage statique totalement
inféré, ses effets de bord contrôlés et son évaluation paresseuse. De nombreux autres langages fonctionnels ou des
extension fonctionnelles ont été développés depuis, en voici un aperçu :
1. Le langage Erlang (1986), développé par Ericsson, se base sur la programmation fonctionnelle pour offrir
un langage propre à la programmation concurrente, parallèle et temps réel.
2. Le langage Scheme et ses dialectes (Racket, MIT Scheme), souvent utilisés dans le milieu académique, est
un langage très bien supporté par de nombreux outils et des compilateurs efficaces.
3. Le langage JavaScript (1995) supporte de nombreux concepts de programmation fonctionnelle.
4. Common Lisp (1984), OCaml (1996) et Scala (2003) sont des langages qui combinent la programmation
fonctionnelle et la programmation orientée objet.
5. Plusieurs langages (Clojure, Scala et F#) ont appliqué la programmation fonctionnelle à des architectures
logicielles existantes (la JVM et le .NET framework).
6. Le C++ dans sa dernière version (C++11) permet de développer avec un style fonctionnel.
1.2 Objectifs spécifiques
L'objectif du cours est double : apprendre la programmation fonctionnelle et des techniques avancées de program-
mation souvent propre à la programmation fonctionnelle. Certaines techniques peuvent être mises en applications
dans certains langages qui ne sont pas fondamentalement fonctionnels, comme le C ou le Java.
1.3 Contenu détaillé
Thème Contenu Heures
0 Lecture du plan de cours, introduction à la pensée fonctionnelle et histoire 2
1 Principes du langage Haskell, utilisation de l’interpréteur 2
2 Compilation, entrées et sorties en Haskell : la monade IO 4
3 Typage : importance, inférence automatique, fiabilité 4
4 Listes, récursivité et fonctions 6
5 Fonctions de haut niveau, itérateur, abstraction fonctionnelle 8
6 Données structurées, algorithmes et abstraction des données 8
7 Programmation par continuation 6
8 Classes de types 5
9 Programmer avec des états : les monades. 5