Présentation générale de l'UE
Description générale
UE d'algorithmique de découverte de la programmation déclarative avec 2 paradigmes de programmation illustrés par 2 langages : la programmation logique avec contraintes avec ProLog et la programmation concurrente ou collaborative avec Erlang. La découvertes de ces 2 paradigmes/langages aura pour but de déplacer le centre de gravité de la programmation d'une activité centrée sur les actions et l'organisation des actions vers une activité, qui reste une activité de programmation, mais qui est centrée sur les propriétés algorithmiques des programmes produits (correction, complétude, terminaison). En particulier, ce focus aura sa place dans la programmation de résolution de problèmes et la programmation collaborative où la complexité (humaine) des programmes à rédiger est plus importante.
Organisation
L'UE comporte 12 semaines d'enseignements, chaque semaine ayant une séquence type Cours Magistral (1h30 tous ensemble), une séquence type Travaux Dirigées (1h30 en groupe de 32 max). Un travail important, en binôme, de préparation et de consolidation des TD sera demandé et remplacera les TP (absents, par manque d'heures disponibles dans la maquette ; remplacés par du travail en autonomie, encadrés sur la plateforme Caseine). Les cours commencent la première semaine, les TD la seconde semaine.
Évaluation des apprentissages (présentation chronologique)
1 partiel à la fin de la partie Programmation logique (25%),
1 note de préparation de TD et programmation + 1 note de compte-rendu sur un projet en ProLog (l'ensemble : 25%),
1 Examen terminal en Prolog (1/2) et Erlang (1/2) (50%).
Ressources
Moodle, EDBA, SWI-ProLog, SWISH, Erlang
Bibliographie
ProLog, the Standard (P. Deransart, A. Ed-Dbali, L. Cervoni).
Erlang : programmation (Mickae͏̈l Rémond). Programmer en Erlang (Francesco Cesarini et Simon Thompson).
Planning
Sem. | Cours | Trav. Dir. |
---|---|---|
1 | 1. Introduction générales à l'UE, Bibliographie, Planning (2/3 ProLog, 1/3 Erlang) ; Démonstration de ProLog (les liens de famille : parent, grandParent, ancetre, ...) | |
2 | 2. Programmation Logique : Grammaire ProLog, Unification, Moteur d'exécution Premiers algorithmes (IA ?) |
1. Algorithmes sur des entiers symboliques (zero...dix) avec la relation successeur pour définir l'arithmétique. Suite avec les listes, pour une représentation des nombres (Prolog) |
3 | 3. Algorithmique de base, propriétés des algorithmes (complétude, correction, terminaison, complexité) | 2. Algorithmes simples sur les listes (Prolog) |
4 | 4. Algorithmique avancée / programmation déclarative (réversibilité, non-déterminisme, contraintes) | 3. Algorithmes de tri (Prolog) |
5 | 5. Algorithmique et programmation - fin (ordre de rédaction/d'évaluation, coupure, gel) . | 4. Algorithmes orientés structure de données |
6 | 6. Langages formels (si le temps le permet) | 5. Algorithmes orientés structure de contrôle |
7 | 7. Partiel | 6. Algorithmes orientés langages formels ou problèmes |
8 | 8. Programmation concurrente ou collaborative: Erlang, introduction à partir de ProLog. Algorithmique de base. | 7. Correction partiel |
9 | 9. Programmation fonctionnelle (ou Grammaires régulières.) | 8. Algorithmes de base (Erlang) |
10 | 10. Parallélisme et communication. | 9. Tris (Erlang) |
11 | 11. Motif de programmation : Producteur-consommateur. | 10. Algorithmes concurrents (Erlang) |
12 | 12. Démonstrations Erlang. Clôture de l'UE. | 11. Algorithmes concurrents orientés problèmes (Erlang) |
12. Révisions générales (Erlang en 1er). |
Objectifs pédagogiques (en terme de connaissances et de compétences) :
- Etre capable de lire ou rédiger et suivre une spécification structurant l'écrire d'un code Prolog ou Erlang
- Pouvoir dérouler l'arbre d'exécution d'un programme ProLog (avec renommages lors des unifications et retours en arrière en cas d'échec), ou l'exécution d'un programme Erlang
- Etre capable d'effectuer une analyse inductive (récursive) pour la résolution d'un problème menant à un programme ProLog ou Erlang correct/complet/qui termine
- Connaitre et savoir appliquer les paradigmes de résolution de problème (Prolog et CLP) et les motifs d'écriture de programmes collaboratifs (Erlang) : Branch&Bound ; Producteurs/Consommateurs ; plus si le temps le permet (autours des automate, expr. régulières, grammaires)