% INF6120 — Programmation fonctionnelle et logique % UQAM — Département d'informatique % Plan de cours — Été 2022 * Horaires, locaux et enseignants: * Site web du cours: Responsable(s) du cours ======================= Coordination ------------ Villemaire, Roger PK-4615 Enseignement ------------- Malenfant, Bruno PK-4115 Groupes: 050 Description du cours ==================== Objectifs --------- Faire l'acquisition de nouvelles techniques et stratégies de programmation par l'apprentissage des concepts fondamentaux des langages de programmation fonctionnels et logiques. Apprécier l'apport de ces langages au développement logiciel. Sommaire du contenu ------------------- La récursion comme méthode générale de résolution de problèmes. Bref historique de la programmation fonctionnelle. Effet de bord, référence immuable et évaluation des expressions. Répartition par appariement de motifs. Fonctions comme argument et valeur de retour. Stratégies d'évaluation des arguments. Polymorphisme et déduction des types. Fermetures, *curryage* et application partielle. Fonctions d'ordre supérieur (`map`, `reduce/fold`, `filter`). Concurrence et parallélisme en programmation fonctionnelle. Bref historique de la programmation déclarative et logique. Règles, inférence et clauses de Horn. Recherche par retour arrière et déduction. Unification et résolution. Coupure et négation. Programmation par contraintes, consistance d'arc, de chemins et problèmes de satisfaction de contraintes. Comparaison des approches de programmation logique et par contraintes. Modalité d'enseignement ----------------------- Ce cours comporte une séance obligatoire de laboratoire (2 heures). Préalables académiques ---------------------- - INF1131 - Mathématiques pour informaticien ou INF1132 - Mathématiques pour l'informatique ou MAT1060 - Mathématiques algorithmiques - INF2120 - Programmation II Objectif du cours ================= Ce cours vise à initier à la programmation fonctionnelle et logique. Il cherche à illustrer et à mettre en évidence les techniques de programmation propres à ces paradigmes. Il illustre leur potentiel et leur intérêt pour la mise en oeuvre d'application complexes notamment dans le domaine de l'intelligence artificielle. Les compétences développées dans le cadre de ce cours vous rendront capable: - de connaître chacun des paradigmes, - d'apprécier les possibilités et les limites de chacun d'eux, - de développer des applications dans chacun des paradigmes. Contenu du cours ================ Ce cours initie à des approches de programmation originales et différentes de la programmation impérative ou objet. Il met en évidence les caractéristiques, le potentiel de chacun de ces paradigmes au moyen d'une introduction à des langages spécifiques et d'applications typiques de ces langages. Haskell permet de donner un exemple de langage fonctionnel puissant et moderne où les aspects liés aux types de données (vérification, polymorphisme, encapsulation) sont particulièrement développés. Prolog sert à illustrer le concept de programmation logique et les apports liés aux processus d'unification et de résolution Caractérisation générale des paradigmes étudiés dans le cadre du cours: programmation fonctionnelle et programmation logique. 1. La programmation fonctionnelle : Haskell - introduction: historique et concepts de base, - aspects syntaxiques et sémantiques des langages applicatifs, - récursivité et types récursifs, - vérification de types, inférence de types, polymorphisme, - fonctions d'ordre supérieur et curryage, - types abstraits, encapsulation, modules et foncteurs, - les entrées-sorties et les monades, - le mécanisme de l'évaluation paresseuse. 2. La programmation logique : Prolog - introduction: historique et concepts de base, - les faits et le principe d'unification, - les règles et la résolution, - les listes et la récursivité, - exemples d'applications. Modalités d'évaluation ====================== Description sommaire Pondération ---------------------- ------------- Examen intra 30% Examen final 30% TP1 (fonctionnel) 20% TP2 (logique) 20% Pour réussir le cours, la moyenne des **examens** et des **travaux pratiques** doit être supérieure ou égale à 50% (double seuil). L'utilisation de documents est permise aux examens. Les cartes d'étudiant seront contrôlées et exigées au début de chaque examen. À moins d'indication contraire, les travaux pratiques doivent être réalisés individuellement. Une pénalité de 1% par **heure** de retard sera appliquée. La qualité du français constitue un critère d'évaluation pour un maximum de 10% de la note. La note finale (en lettre, A+, A, etc.) pour le trimestre sera attribuée en fonction de l'atteinte des objectifs spécifiques à travers les évaluations. La distribution des résultats dans le groupe pourrait aussi être utilisée. Aucune autre opportunité (travail supplémentaire, etc.) d'augmenter le nombre de points ne sera accordée. Les règlements concernant le plagiat seront strictement appliqués. Pour plus de renseignements, consultez le site suivant : Médiagraphie ============ UO ( site web du cours ) UO Lipovaca, M. -- *Learn you a Haskell for a greater good* UO Lipovaca, M., Robert, V. (traducteur), -- *Apprendre Haskell vous fera le plus grand bien* VC Clocksin, W.F., Mellish, C.S. -- *Programming in Prolog* -- Spring-Verlag, 281P., 1994 (4th edition). VR Thompson, S. -- *Haskell, The Craft of Functional Programming* -- Addison-Wesley. 487 P., 1999 VR Convington, M.A., Nute, D. & Vellino, A. -- *Prolog Programmin in Depth* -- Prentice-Hall, 516P., 1997. VC Bird, R. -- *Introduction to Functional Programming using Haskell* -- Prentice-Hall PRESS, 460 P. (2nd edition). VC Rabhi, F. Lapalme, G. -- *Algorithms: A functional Programming Approach* -- Addison-Wesley, 235 P.,1999. VC Field, A.J., Harrison, P.G. -- *Functional Programming, International Computer Science* -- Workingham G.B.: Addison-Wesley, 602 P., 1988. VC Bird, R. Wadler, P. -- *Introduction to Functional Programming, Computer Science* -- NEW YORK: Prentice-Hall, 293 P., 1988. VC Bellot, Patrick -- *Objectif Prolog* -- Masson, 151 P., 1994. VC Clocksin, W.F. -- *Clause and Effect: Prolog Programming for the Working Programmer* -- Springer, 143 P., 1997. VC Bratko, I. -- *Prolog Programming for Artificial Intelligence* -- International Computer Science, Workingham G.B.: Addison-Wesley, 597 P., 1990 (2nd edition). VC Sterling, L. Shapiro, E. -- *The Art of Prolog* -- Cambridge MA: The MIT Press, 560 P., 1994 (2nd edition). UC -- *The Haskell Platform*. UC -- *SWI- Prolog*.