Programmation
fonctionnelle
Cours + exos corrigés
Éric Violard
Maître de conférences HDR à l’université de Strasbourg
P-titre.fm Page i Jeudi, 30. janvier 2014 10:46 10
© Dunod, Paris, 2014
ISBN 978-2-10-070385-2
Au terme de ce projet, je souhaite dédier ce livre à ma fille Julie et à son
bonheur de lire et d'apprendre.
Je ne saurais assez dire merci à tous les membres de ma famille, aussi je
pense particulièrement à ma compagne (Myriam), à son écoute et son aide
précieuse, à mes parents (Lyne et Raymond) et leur implication dans mon
parcours scolaire et universitaire, et à mon frère (Christophe) au sens
artistique inné.
Je tiens également à remercier M. Jean-Luc Blanc des éditions DUNOD pour
m'avoir fait confiance, ainsi que mon interlocutrice privilégiée Mme Carole
Trochu et tous ceux et celles qui ont contribué à leur manière à la réalisation
effective de ce manuel.
Enfin, je veux adresser un grand remerciement à tous mes étudiants pour la
curiosité et l'enthousiasme qu'ils ont manifesté lors de mes enseignements
et qui sont à l'origine de ma motivation pour écrire ce manuel.
P-titre.fm Page ii Jeudi, 30. janvier 2014 10:46 10
Table des matières
Avant-propos VI
1Introduction 1
1.1
Quelques termes courants en programmation 1
1.2
Modèles 2
1.3
Significations du mot « variable » 9
1.4
Éléments purs ou impurs 10
1.5
Familles de langages fonctionnels 11
Points clefs 15
2Programmer avec des fonctions 17
2.1
Notions élémentaires 17
2.2
Définir une fonction 20
2.3
Fonctions plus complexes 25
2.4
Quelques facilités dans les langages 27
Points clefs 31
Exercices 31
Solutions 33
3Récursivité 39
3.1
Introduction 39
3.2
Définition récursive 40
3.3
Inventer une définition récursive 43
3.4
Récursivité et preuve 44
3.5
Problème de la terminaison 45
3.6
Récursivité terminale 48
3.7
Autres formes de définitions récursives 55
Points clefs 57
Exercices 58
Solutions 59
4Types 63
4.1
Introduction 63
4.2
La notion de type dans les langages fonctionnels 64
4.3
Les langages faiblement/fortement typés 65
ViolardTDM.fm Page iii Jeudi, 30. janvier 2014 10:48 10
iv
Programmation fonctionnelle
4.4
Les constructeurs de types « produit » et « flèche » 67
4.5
Fonctionnelles et fonctions d’ordre supérieur 68
4.6
Polymorphisme 78
4.7
Calcul ou inférence de type 81
Points clefs 91
Exercices 92
Solutions 95
5Types structurés 103
5.1
Introduction 103
5.2
Types abstraits algébriques 104
5.3
Quelques catégories de types structurés 111
5.4
Types structurés polymorphes 113
5.5
Filtrage par motif 115
5.6
Exemple des listes 120
5.7
Exemple des arbres 128
Points clefs 134
Exercices 135
Solutions 139
6Schémas de programmes 147
6.1
Introduction 147
6.2
Toujours le même schéma 148
6.3
Capturer un schéma de programmes 150
6.4
Schéma reduce 150
6.5
Cacher la récursivité 152
6.6
Autres schémas classiques 153
Points clefs 158
Exercices 159
Solutions 162
7Lambda-calcul 169
7.1
Introduction 169
7.2
Syntaxe du lambda-calcul 170
7.3
Signification des lambda-expressions 172
7.4
Notion de réduction 175
7.5
Règles de réduction 176
7.6
Réduction généralisée 182
7.7
Stratégie de réduction 185
Points clefs 194
Exercices 195
Solutions 197
ViolardTDM.fm Page iv Jeudi, 30. janvier 2014 10:48 10
Table des matières
v
Annexe A – Quelques éléments sur les langages de ce manuel 205
A.1
Interpréteur et compilateur 205
A.2
Commentaires 207
A.3
Types de base et littéraux 208
A.4
Principaux opérateurs 208
A.5
Règles de typage 209
A.6
Notations prédéfinies pour les listes 210
A.7
Schémas de programmes prédéfinis 211
Ressources complémentaires 212
Index 213
Disponibles en ligne sur
www.dunod.com/contenus-complementaires/9782100703852
Annexe B – Traduction d’un langage fonctionnel en lambda-calcul
B.1 Traduction des expressions de base
B.2 Traduction des expressions fonctionnelles
B.3 Traduction des définitions de fonction
B.4 Traduction de la récursivité
B.5 Traduction des types structurés
Annexe C – Réalisation des entrées/sorties
C.1 Notion de monade
C.2 Fonctions monadiques d’entrée/sortie
C.3 Exemples
ViolardTDM.fm Page v Jeudi, 30. janvier 2014 10:48 10
1 / 18 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !