Table des mati`eres
1 Introduction 5
1.1 Qu’attendre de ce document ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.2 Qu’est-ce que la programmation fonctionnelle ? . . . . . . . . . . . . . . . . . 5
1.1.3 Int´erˆet de la programmation fonctionnelle . . . . . . . . . . . . . . . . . . . . 6
1.2 Qu’est-ce qu’une fonction ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1 D´efinition math´ematique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.2 Sp´ecification par une propri´et´e . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.3 Notion de fonction «calculable »........................ 7
2 Th´eorie de la programmation fonctionnelle 9
2.1 λ-calcul ........................................... 9
2.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.2 λ-termes purs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.3 λ-termes typ´es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.4 Inf´erence de type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.5 Types Ocaml d´efinis par l’utilisateur . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.6 λ-calcul ....................................... 13
2.1.7 R`egle β: r´eduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.8 Conflits empˆechant les β-r´eductions . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.9 R`egle α: renommage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.10 Th´eor`eme de Church-Rosser .......................... 16
2.1.11 Appel par nom, appel par valeur . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.12 Curryfication des fonctions multivariables . . . . . . . . . . . . . . . . . . . . 18
2.1.13 Fonction λ-d´efinissable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.14 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2 Fonctions r´ecursives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.2 R´ecursivit´e terminale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.3 N´ecessit´e de pr´eciser la d´efinition de fonction r´ecursive . . . . . . . . . . . . . 22
2.2.4 Fonctions r´ecursives primitives . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.5 Traduction fonctionnelle r´ecursive primitive des boucles for . . . . . . . . . . 23
2.2.6 Fonctions calculables non r´ecursives primitives . . . . . . . . . . . . . . . . . 24
2.2.7 Fonctions r´ecursives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2.8 Traduction fonctionnelle r´ecursive des boucles while .............. 25
3