Plan de cours IFT 359 Programmation fonctionnelle Été 2012
27 avril 2012
1
Département d’informatique
IFT 359
Programmation fonctionnelle
Plan de cours
Été 2012
Enseignant Benoît Fraikin
Courriel : Benoît Fraikin@USherbrooke.ca
Local : D4-2009
Téléphone : (819) 821-8000 poste 62013
Site : http://pages.usherbrooke.ca/bfraikin/Cours/IFT359
Disponibilité : à déterminer, à vérifier par courriel
Horaire
Jeudi 15h30 à 17h20, salle de cours D4-2021
Vendredi 10h30 à 12h20, salle de cours laboratoire D4-1017
Description officielle de l'activité pédagogique
1
Objectifs Formaliser les notions d'abstraction procédurale et d'abstraction de données dans le cadre de la
programmation fonctionnelle.
Contenu Qualité, modularité, conception fonctionnelle. Processus récursifs et itératifs. Objets atomiques,
listes, sélection, abstraction d'ordre supérieur. Abstraction à l'aide de flots. Exemples faisant appel
à des algorithmes spécifiques et aux structures de données associées. Insistance sur la qualité de la
solution. Introduction à la preuve de programme.
Crédits 3
Organisation 3 heures d’exposé magistral par semaine
1 heure d’exercices par semaine
5 heures de travail personnel par semaine
Antérieure IFT 159
1
http://www.usherbrooke.ca/fiches-cours/ift359
Plan de cours IFT 359 Programmation fonctionnelle Été 2012
27 avril 2012
2
1 Présentation
1.1 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 est restée dans
l’ombre de la programmation orientée objet (qui reste une forme de programmation impérative), mais elle refait
maintenant surface, car ses propriétés sont très utiles pour faire face à certains problèmes actuels (e.g. LINQ,
MapReduce). Dans le cadre du cours, nous allons étudier un langage Scheme, un dialecte de Lisp créé par Guy L.
Steele et Gerald J. Sussman dans les années ‘70. Plus particulièrement, nous allons utiliser le langage Racket
(http://racket-lang.org/) et DrRacket, son environnement graphique de développement, particulièrement adapté
à l’apprentissage. De nombreux autres langages fonctionnels 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 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. Ce langage sera aussi partiellement étudié dans le cours.
3. Bien que cela demeure méconnu, le langage JavaScript (1995) supporte plusieurs 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. Dans les dernières années, plusieurs langages (Clojure, Scala et F#) ont appliqué la programmation
fonctionnelle à des architectures logicielles existantes (la JVM et le .NET framework).
1.2 Objectifs spécifiques
L'objectif du cours est double : apprendre la programmation fonctionnelle et des techniques avancées de program-
mation 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
Contenu
Heures
1
Introduction au langage Racket, principe de l’évaluation
4
2
Expression symbolique, typage dynamique et structure de données primitives
2
3
Évaluation d’expression : ordre normale, ordre stricte ou applicatif, fermeture
6
4
Fonction de haut niveau, itérateur, abstraction fonctionnelle
8
5
Données structurées et algorithmes
6
6
Introduction à Haskell : typage statique et évaluation paresseuse
8
7
Fiabilité : contrat (Racket), typage (Haskell) et preuve de programme
8
8
Programmation par continuation
6
Plan de cours IFT 359 Programmation fonctionnelle Été 2012
27 avril 2012
3
2 Organisation
2.1 thode pédagogique
Une semaine comprend trois heures de cours constituées d’un exposé magistral et une heure d’exercices et de
travaux en laboratoire. Le cours comporte quatre devoirs. Vous devez remettre un devoir par personne. Aucun retard
ne sera admis sans une raison qui doit être acceptée par la Faculté. La correction tiendra compte de l’exactitude de la
réponse, de l’utilisation judicieuse des concepts, de la clarté des programmes et de la qualité du français lors des
réponses rédigées.
2.2 Calendrier du cours
Cours du
Activité
Contenu
Travaux
3 mai
Cours
1
4 mai
cours / laboratoire
1
10 mai
Pas d’activité
11 mai
cours / laboratoire (*)
2/3
énoncé TP1
17 mai
cours / laboratoire
3
18 mai
Pas d’activité / Festival des harmonies
24 mai
cours
3
25 mai
laboratoire
3
remise TP1 / énoncé TP2
31 mai
cours
4
1 juin
laboratoire
4
7 juin
cours
4
8 juin
laboratoire
4
remise TP2
Période du 12 au 23 juin
Examen périodique laboratoire
14 ou 21 juin
cours
5
15 ou 22 juin
laboratoire
5
énoncé TP3
28 juin
cours
5
29 juin
laboratoire
6
5 juillet
cours
6
6 juillet
laboratoire
6
remise TP3
12 juillet
cours
6
13 juillet
laboratoire
7
énoncé TP4
19 juillet
cours
7
20 juillet
laboratoire
7
26 juillet
cours
7
27 juillet
laboratoire
8
2 août
cours
8
remise TP4
3 août
laboratoire
8
Période du 7 au 17 août
Examen final
Il y a congé le vendredi 18 mai (Festival des harmonies). La Faculté des sciences détermine l’horaire des examens. Durant la période
d’examen, il n’y a pas cours la semaine où se tient l’examen, mais il y a cours la semaine où celui-ci n’a pas lieu.
(*) Le 11 mai il y aura un rattrapage de 13h30 à 15h30 au laboratoire en plus du cours le matin
2.3 Évaluation
Devoirs (4 x 5%) : 20 %
Examen périodique: 40 %
Examen final: 40 %
Plan de cours IFT 359 Programmation fonctionnelle Été 2012
27 avril 2012
4
2.3.1 Qualité du français et de la présentation
Conformément aux articles 36, 37 et 38 du règlement facultaire d’évaluation des apprentissages ([UdS1]),
l’enseignant peut retourner à l’étudiante ou à l’étudiant tout travail non conforme aux exigences quant à la qualité de
la langue et aux normes de présentation.
2.3.2 Plagiat
Un document dont le texte et la structure se rapportent à des textes intégraux tirés d’un livre, d’une publication
scientifique ou même d’un site Internet, doit être référencé adéquatement. Lors de la correction de tout travail
individuel ou de groupe une attention spéciale sera portée au plagiat, défini dans le Règlement des études comme
« le fait, dans une activité pédagogique évaluée, de faire passer indûment pour siens des passages ou des idées tirés
de l’œuvre d’autrui. ». Le cas échéant, le plagiat est un délit qui contrevient à l’article 8.1.2 du Règlement des études
([UdS2]) : « tout acte ou manœuvre visant à tromper quant au rendement scolaire ou quant à la réussite d’une
exigence relative à une activité pédagogique. » À titre de sanction disciplinaire, les mesures suivantes peuvent être
imposées : a) l’obligation de reprendre un travail, un examen ou une activité pédagogique et b) l’attribution de la
note E ou de la note 0 pour un travail, un examen ou une activité évaluée. Tout travail suspecté de plagiat sera référé
au Secrétaire de la Faculté des sciences.
3 Manuel obligatoire
Le livre obligatoire ([Cha96]) est disponible à la librairie du campus.
Plan de cours IFT 359 Programmation fonctionnelle Été 2012
27 avril 2012
5
4 Références
Livre obligatoire
[Cha96] CHAZARAIN, J.,
Programmer en Scheme : de la pratique à la théorie,
Vuibert, 1996.
Références complémentaires
[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
[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/
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !