Programmation Fonctionnelle Avancée
But du cours
Ce cours est la suite du cours de L2 « Introduction à la programmation fonctionnelle » et d'une partie du cours de L2 « Outils Logiques et Algorithmiques ». On y présente :
- Le paradigme fonctionnel et le langage OCaml (rappel)
- L'utilisation de structure de données persistentes
- La programmation récursive et son utilisation dans des algorithmes avancés (diviser pour régner, alogorithme avec retour arrière)
- L'interaction entre programmation fonctionnelle est aspects impurs (structures de données mutables, boucles, …)
- Outils de génie logiciels propres à OCaml : organisation du code avec les modules et les foncteurs, utilisation de dune
- Concepts avancés : monade d'erreur et de parallélisme, transformations CPS
Le langage utilisé dans le cours est le langage OCaml.
Travailler avec OCaml
Les tutoriels suivants permettent d'installer OCaml sur votre machine ou de travailler à distance avec OCaml sous l'environnement JupyterHub. Un glossaire liste les termes utilisés, n'hésitez pas à le consulter si certains termes semblent obscurs.
- Installation d'OCaml + VSCode sous Windows
- Installation d'OCaml sous WSL + VSCode sous Windows
- Installation d'OCaml sous MacOS
- Installation d'OCaml sous Linux (à venir)
- Utilisation de JupyterHub pour OCaml
Instruction pour les TPs
Pour les TPs, nous utilisons l'éditer Visual Studio Code. Lors de votre premier TP il faudra effectuer les commandes suivantes, une fois seulement :
echo 'source /public/kn/setup_ocaml.sh' >> ~/.bashrc
code --install-extension ocamllabs.ocaml-platform
Vous pouvez ignorer les messages de la seconde commande
Plan du cours, supports de cours et de TP
- Cours 1 : Présentation, rappels sur le langage OCaml.
cours 1 en HTML5
, cours 1 en
PDF et version
imprimable
.
- Le sujet du TP 1.
- Le corrigé du TP 1
- Cours 2 : Rappels sur le langage OCaml (fin).
cours 2 en HTML5
, cours 2 en
PDF et version
imprimable
.
- Cours 3 : Arbres binaires de recherche (1).
cours 3 en HTML5
, cours 3 en
PDF et version
imprimable
.
- Le sujet du TP 3.
- L'archive avec le code à compléter.
- Le corrigé du TP 3.
- Cours 4 : Modules, Foncteurs et compilation séparée.
cours 4 en HTML5
, cours 4 en
PDF et version
imprimable
.
- Le sujet du TP 4.
- L'archive avec le code à compléter.
- Le corrigé du TP 4.
- Cours 5 : Modules, Foncteurs et compilation séparée (fin)
cours 5 en HTML5
, cours 5 en
PDF et version
imprimable
.
- Le sujet du TP 5.
- L'archive avec le code à compléter.
- Le corrigé du TP 5.
- Cours 6 : Traits impératifs d'OCaml
cours 6 en HTML5
, cours 6 en
PDF et version
imprimable
.
- Le sujet du TP 6.
- L'archive avec le code à compléter.
- Le corrigé du TP 6.
- Cours 7 : Tables de hachage
cours 7 en HTML5
, cours 7 en
PDF et version
imprimable.
- Le sujet du TP 7.
- L'archive avec le code à compléter.
- Le corrigé du TP 7.
- Cours 8 : Trie (traille)
cours 8 en HTML5
, cours 8 en
PDF et version
imprimable.
- Le code de la recherche dans un trie :
- Le sujet du TP 8.
- L'archive avec le code à compléter.
- Le corrigé du TP 8.
- Cours 9 : Trie (fin), modèle mémoire OCaml
cours 9 en HTML5
, cours 9 en
PDF et version
imprimable.
- Continuer le TP 8
- Cours 10 : Étude de cas
cours 10 en HTML5
, cours 10 en
PDF et version
imprimable.
- Le fichier d'idées écrit en cours collectivement pour arriver à la solution
- Le code écrit en cours est dans l'archive du TP
- Le sujet du TP 10.
- L'archive avec le code à compléter.
- Le corrigé du TP 10.
- Cours 11 : Étude de cas, backtracking
cours 11 en HTML5
, cours 11 en
PDF et version
imprimable.
- Le sujet du TP 11.
- L'archive avec le code à compléter.
- Le corrigé du TP 11.
- Cours 12 : Révisions cours 12 en HTML5 , cours 12 en PDF et version imprimable.
Information pratiques
- Cours : mardi après-midi, Petit amphi du PUIO.
- TP : vendredi et lundi après-midi
- Chargés de TP : Quentin Chuet (lundi), Josué Moreau (vendredi), François Pirot (lundi), Clémence Sebe (vendredi).
- Les supports de cours sont mis en ligne au plus tard la veille au soir
- Les corrigés sont mis en ligne tous les mardi, avant le cours