Pourquoi faire de la programmation fonctionnelle?
• Illustrer le paradigme et notamment comprendre comment une programmation sans variable et affectation peut se faire élégamment (programmation sans effets de bord);
• Comprendre les mécanismes avancés de manipulation de fonctions;
• Voir qu’il est possible de faire une analyse fonctionnelle d’un cahier des charges compilable et exécutable, c-à-d programmer dans un langage de spécification;
• Mieux appréhender l’évolution des langages impératifs car beaucoup de notions fonctionnelles sont reprises par ces langages.
Propriétés des langages fonctionnels
Pas d’effets de bord
Puisqu’il n’y a pas de variables, les problèmes des variables globales, des alias, des pointeurs disparaissent; et, 2 évaluations de la même fonction donnent toujours le même résultat.
Traitement des fonctions comme des valeurs
Les fonctions peuvent être passées en paramètre et peuvent retourner d’autres fonctions.
Propriétés additionnelles de Haskell
• Fortement typé
• Inférence de typage
Le compilateur détermine lui-même les types des fonctions.
•Polymorphisme algorithmique
Un algorithme peut s’écrire sans tenir compte des propriétés spécifiques des données qui sont transformées.
• Instantiation partielle de fonction
Former de nouvelles fonctions à partir d’autres en fixant certains paramètres.
• Évaluation paresseuse des arguments
Introduit la possibilité de réaliser des structures de données infinies.
• Ensembles ZF (Zermelo-Fränkel) : Listes infinies ayant certaines propriétés.
• Traitement uniforme d’actions purement impératives par la notion de monade.
Où sont les problèmes?
Difficulté de compréhension: La programmation fonctionnelle est certes plus abstraite que le carcan de la programmation impérative, et donc certainement plus difficile.
Perte de performance: Le code généré par les compilateurs Haskell est quelque peu plus lent comparé à une implémentation entièrement en C. Mais d’autres langages fonctionnels, par exemple ML (semblable à Haskell), produisent des exécutables souvent plus rapides que leur pendant C++.
Programmation fonctionnelle en Haskell (275 Ko) (Cours PDF)