Descriptif de cours : 2016-2017 INFOB316 - Programmation fonctionnelle et logique Th. Q1 30 h. Ex. Q1 30 h. Th. Q2 Ex. Q2 Annuel Lieu de l'activité : NAMUR Langue d'enseignement : French / Français Enseignants Titulaire(s) : Vanhoof Wim Prérequis [INFOB237] Algorithmique Objectifs A la fin du cours, les étudiants devraient maîtriser les techniques de base en programmation fonctionnelle et logique et leurs incarnations dans les langages Haskell et Prolog. Contenu Ce cours vise à étudier le paradigme de programmation fonctionnelle et logique. Pour chacun, on y présente d'abord les concepts de base (fonction, réduction, évaluation, pour la programmation fonctionnelle, logique de Horn, stratégie de sélection, négation) avant d'aborder des sujets plus avancés, comme les fonctions d'ordre supérieur, les types polymorphes, les monades ou encore quelques exemples de programmation non déterministe. Une attention particulière est aussi portée aux techniques de programmation. Table des matières Partie 1: Programmation déclarative 1. Programmation fonctionnelle (Haskell) - Valeurs, expressions et réductions - Stratégies de réduction et l'évaluation paresseuse - Les expressions lambda - Fonctions à plusieurs arguments (currying) - Opérateurs - Composition de fonctions - Signatures de type polymorphes - Récursion terminale - Types algébriques: énumeration, union, types produits - Le polymorphisme dans les définitions de type - Fonctions élémentaires - Preuve par induction structurelle - Les listes infinies 2. Programmation logique (Prolog) - De la programmation fonctionnelle à la programmation logique - Eléments de base de la programmation logique - Structures de données élémentaires - Programmation non-déterministe Quelques particularités de Prolog : programmation d'ordre supérieur et l'opérateur cut - Les "difference lists" - Introduction à la méta-programmation Méthodes d'enseignement Le cours est conçu comme une suite d'exposés où se mèlent théorie et applications pratiques. Aux travaux pratiques, les étudiants sont amenés à des travaux de synthèse prenant la forme d'exercices de programmation de taille moyenne. Mode d'évaluation Cet unité d'enseignement est globalement évalué au moyen d'un examen écrit où l'étudiant se voit confronté à des questions de compréhension, de connaissance et d'application. Sources, références et supports éventuels • • • • • • • • • • • • S. Russel et P. Norvicq, Artificial Intelligence: a Modern Approach. Prentice Hall, 2003G. Hutton, Programming in Haskell. Cambridge 2007. S. Thompson, The Craft of Functional Programming, Pearson 1999. R. Bird, Introduction to Functional Programming using Haskell, Prentice-Hall, 1998. P. Hudak, J. Peterson, J. Fasel. A Gentle Introduction to Haskell. Available on-line at http://www.haskell.org/tutorial S. Peyton-Jones (ed.). Haskell 98 Language and Libraries - The Revised Report H. Abelson, G.J. Sussman, J. Sussman. Structure and Interpretation of Computer Programs. The MIT Press, 1985 A. Aho, J. Ullman. Concepts fondamentaux de l'informatique. Freeman and Company, 1992. Dunod, Paris, 1993. W. F. Clocksin and C. S. Mellish, Programming in Prolog, 2003. M. Bramer, Logic Programming with Prolog, Springer, 2005. U. Nilsson and J. Maluszynski, Logic, Programming and Prolog (2ed), John Wiley & Sons Ltd. L. Sterling, E. Shapiro. The art of Prolog. MIT Press, 1986. Y. Deville. Logic Programming: Systematic Program Development. Addison-Wesley, 1990. Formations concernées Bloc Crédits Unités d'enseignement supplémentaires au master 120 en sciences informatiques 1 4 Unités d'enseignement supplémentaires au master 60 en sciences informatiques 1 4 Master 120 en sciences informatiques, à finalité spécialisée 1 3 Bachelier en sciences informatiques 3 4