Plan de cou urs IFT I 359 – Prog grammation fonnctionnelle Étté 2013 Département d’iinformatique IF FT 359 Pro ogramma ation foncctionnelle Pllan de cours Été 2013 Enseignan nt Benoît Fraikin Courrieel : Local : Télépho one : Site : Dispon nibilité : Benoiit.Fraikin@US Sherbrooke.ca D4-20 009 (819) 821-8000 postte 62013 http:///pages.usherbrooke.ca/bfraikkin/Cours/IFT359 à déteerminer, à vériffier par courrieel Horaire Jeudi 15h30 à 17 7h20, salle de cours D4-2021 Vendreedi 10h30 à 12 2h20, laboratoirre D4-1017 Descriptio on officielle dee l'activité péd dagogique1 Objectifs Formaliser les notionss d'abstraction procédurale ett d'abstraction de données danns le cadre de la program mmation fonctiionnelle. Contenu Qualitéé, modularité, conception c foncctionnelle. Proocessus récursiffs et itératifs. O Objets atomiquues, listes, sélection, s abstraaction d'ordre supérieur. Absstraction à l'aidde de flots. Exeemples faisant appel à des allgorithmes spécifiques et aux x structures de données assocciées. Insistance sur la qualitéé de la solution n. Introduction n à la preuve dee programme. Crédits 3 Organisation maine 3 heurees d’exposé maagistral par sem 1 heuree d’exercices paar semaine 5 heurees de travail perrsonnel par sem maine Antérieuree IFT 159 9 1 http://ww ww.usherbrooke.caa/fiches-cours/ift35 59 30-04-2013 1 Plan de cours 1 1.1 IFT 359 – Programmation fonctionnelle Été 2013 Présentation Mise en contexte Le cours IFT 359 introduit les étudiants à la programmation fonctionnelle. Celle-ci a débuté avec le langage Lisp créé par J. McCarthy en 1958, dans les mêmes années où les langages de haut niveau supportant la programmation impérative (procédurale/structurée) tels que Fortran (1957) et Algol (1958) en étaient à leurs débuts. Tandis que la programmation impérative est basée sur un modèle où un état change en fonction des opérations effectuées (machine de Turing), ce qui est très proche de l’implémentation physique (registres, mémoire, jeu d’instructions de l’UCT, etc.), la programmation fonctionnelle est basée sur un modèle mathématique (lambda calcul) dans lequel une fonction, souvent récursive, prend une entrée et calcule une sortie. La programmation fonctionnelle, restée dans l’ombre de la programmation impérative, refait maintenant surface, car ses propriétés sont très utiles pour faire face à certains problèmes actuels (e.g. LINQ, MapReduce) notamment dans la programmation parallèle sur de multiples cœurs. Dans le cadre du cours, nous allons étudier le langage Haskell. Plus particulièrement, nous allons utiliser la plateforme Haskell (http://www.haskell.org/platform/). Le langage Haskell (1990 et 1998) a été développé pour consolider les acquis des dernières décennies. Il se différencie de Lisp par son typage statique totalement inféré, ses effets de bord contrôlés et son évaluation paresseuse. De nombreux autres langages fonctionnels ou des extension fonctionnelles ont été développés depuis, en voici un aperçu : 1. Le langage Erlang (1986), développé par Ericsson, se base sur la programmation fonctionnelle pour offrir un langage propre à la programmation concurrente, parallèle et temps réel. 2. Le langage Scheme et ses dialectes (Racket, MIT Scheme), souvent utilisés dans le milieu académique, est un langage très bien supporté par de nombreux outils et des compilateurs efficaces. 3. Le langage JavaScript (1995) supporte de nombreux concepts de programmation fonctionnelle. 4. Common Lisp (1984), OCaml (1996) et Scala (2003) sont des langages qui combinent la programmation fonctionnelle et la programmation orientée objet. 5. Plusieurs langages (Clojure, Scala et F#) ont appliqué la programmation fonctionnelle à des architectures logicielles existantes (la JVM et le .NET framework). 6. Le C++ dans sa dernière version (C++11) permet de développer avec un style fonctionnel. 1.2 Objectifs spécifiques L'objectif du cours est double : apprendre la programmation fonctionnelle et des techniques avancées de programmation souvent propre à la programmation fonctionnelle. Certaines techniques peuvent être mises en applications dans certains langages qui ne sont pas fondamentalement fonctionnels, comme le C ou le Java. 1.3 Contenu détaillé Thème 30-04-2013 Contenu Heures 0 Lecture du plan de cours, introduction à la pensée fonctionnelle et histoire 2 1 Principes du langage Haskell, utilisation de l’interpréteur 2 2 Compilation, entrées et sorties en Haskell : la monade IO 4 3 Typage : importance, inférence automatique, fiabilité 4 4 Listes, récursivité et fonctions 6 5 Fonctions de haut niveau, itérateur, abstraction fonctionnelle 8 6 Données structurées, algorithmes et abstraction des données 8 7 Programmation par continuation 6 8 Classes de types 5 9 Programmer avec des états : les monades. 5 2 Plan de cours 2 2.1 IFT 359 – Programmation fonctionnelle Été 2013 Organisation Méthode pédagogique et évaluation Une semaine comprend quatre heures de cours dans lesquelles s’entremêlent la matière présentée par des diapositives, des exemples et des exercices. L’évaluation se fait à l’aide de sept devoirs et deux examens. Seules les six meilleures notes des devoirs seront comptabilisées. Aucun retard ne sera admis sans une raison qui doit être acceptée par la Faculté. Devoirs (6 meilleures notes parmi 7 x 10 %) : 60 % Examen périodique d’une heure : 10 % Examen final de trois heures : 30 % 2.2 Calendrier du cours Cours du Activité Contenu 2 mai 3 mai 9 mai 10 mai 14 mai 2 16 mai 17 mai 1 21 mai 2 23 mai 24 mai 30 mai 31 mai 6 juin 7 juin 13 juin 14 juin 15 au 22 juin 3 27 juin 28 juin 4 juillet 5 juillet 11 juillet 12 juillet 18 juillet 19 juillet 25 juillet 26 juillet 1 août 2 août 6 au 16 août 3 Lecture du plan de cours et introduction laboratoire cours laboratoire cours 2 cours laboratoire 1 cours 2 cours laboratoire cours laboratoire cours laboratoire cours laboratoire Examen périodique 3 pas d’activité pas d’activité cours laboratoire cours laboratoire cours laboratoire cours laboratoire cours laboratoire Examen final 3 0 1 2 2 3 3 4 4 5 4-5 5 4-5-6 6 4-5-6 6 6 6 4-5-6 7 7 7 8 8 8/9 9 9 Travaux Devoir 1 Devoir 2 Devoir 3 Devoir 4 Devoir 5 Devoir 6 Devoir 7 1 Il y a laboratoire le vendredi 17 mai (Festival des harmonies). Les 14 et 21 mai il y aura un rattrapage de 15h30 à 17h20 en salle de cours (D3-2033). 3 La Faculté des sciences détermine l’horaire des examens. Durant les semaines où se tiennent les examens, il n’y a pas cours. 2 30-04-2013 3 Plan de cours 3 IFT 359 – Programmation fonctionnelle Été 2013 Références [ASS96] ABELSON, H., SUSSMAN, G. et SUSSMAN, J., Structure and Interpretation of Computer Programs, Second Edition, Mc Graw Hill, 1996. http://mitpress.mit.edu/sicp/full-text/book/book.html [Cha96] CHAZARAIN, J., Programmer en Scheme : de la pratique à la théorie, Vuibert, 1996. [Dyb96] DYBVIG R. K., The Scheme Programming Language, Second Edition, Prentice Hall, 1996. http://www.scheme.com/tspl2d/index.html [Fel01] FELLEISEN M. et al., How to Design Programs, MIT Press, 2001. http://www.htdp.org [IFT359] FRAIKIN B. Site du cours pages.usherbrooke.ca/bfraikin/Cours/IFT359 [Lip11] LIPOVAČA M. Learn You a Haskell for Great Good, No Starch Press, 2011. http://learnyouahaskell.com/ (http://lyah.haskell.fr/) [SGS08] O'SULLIVAN B., GOERZEN J. et STEWART D., Real World Haskell, O’Reilly, 2008. http://book.realworldhaskell.org/ [UdS1] Université de Sherbrooke Politique d’évaluation des apprentissages disponible via www.usherbrooke.ca/accueil/fr/direction/documents-officiels/politiques/ [UdS2] Université de Sherbrooke Règlement des études disponible via www.usherbrooke.ca/accueil/fr/direction/documents-officiels/reglements/ 30-04-2013 4 L’intégrité intellectuelle passe, notamment, par la reconnaissance des sources utilisées. À l’Université de Sherbrooke, on y veille! Extrait du Règlement des études 8.1.2 Relativement aux activités pédagogiques L'expression délit désigne d'abord tout acte ou toute manœuvre visant à tromper quant au rendement scolaire ou quant à la réussite d'une exigence relative à une activité pédagogique. Sans restreindre la portée générale de ce qui précède, est considéré comme un délit : a) la substitution de personnes ou l’usurpation d’identité lors d'une activité évaluée ou obligatoire; b) le plagiat, soit le fait, dans une activité évaluée, de faire passer indûment pour siens des passages ou des idées tirés de l'œuvre d'autrui; c) l'obtention par vol ou par toute autre manœuvre frauduleuse de document ou de matériel, la possession ou l'utilisation de tout matériel non autorisé avant ou pendant un examen ou un travail faisant l'objet d'une évaluation; d) le fait de fournir ou d'obtenir toute aide non autorisée, qu'elle soit collective ou individuelle, pour un examen ou un travail faisant l'objet d'une évaluation; e) le fait de soumettre, sans autorisation préalable, une même production comme travail à une deuxième activité pédagogique; f) la falsification d'un document aux fins d'obtenir une évaluation supérieure dans une activité ou pour l'admission à un programme. Par plagiat, on entend notamment : Copier intégralement une phrase ou un passage d’un livre, d’un article de journal ou de revue, d’une page Web ou de tout autre document en omettant d’en mentionner la source ou de le mettre entre guillemets Reproduire des présentations, des dessins, des photographies, des graphiques, des données… sans en préciser la provenance et, dans certains cas, sans en avoir obtenu la permission de reproduire Utiliser, en tout ou en partie, du matériel sonore, graphique ou visuel, des pages Internet, du code de programme informatique ou des éléments de logiciel, des données ou résultats d’expérimentation ou toute autre information en provenance d’autrui en le faisant passer pour sien ou sans en citer les sources Résumer ou paraphraser l’idée d’un auteur sans en indiquer la source Traduire en partie ou en totalité un texte en omettant d’en mentionner la source ou de le mettre entre guillemets Utiliser le travail d’un autre et le présenter comme sien (et ce, même si cette personne a donné son accord) Acheter un travail sur le Web ou ailleurs et le faire passer pour sien Utiliser sans autorisation le même travail pour deux activités différentes (autoplagiat) Autrement dit : mentionnez vos sources. Document informatif V.2 (juin 2012) Groupe de travail anti-plagiat