|  | 
   
    | Cours: | mercredi 14:15-16:00, salle CM2 (mercredi 16:15-18:00, salle INM202)
 |  
    | Exercices: | mercredi 16:15-18:00, salle INF2 |  
    
     7 juillet 2004
       
         
Examen final: consulter les notes sur le web ou sur le
         panneau situé à côté du bureau INR 319. Vous pouvez venir
         consulter vos copies dans le bureau INR 318 jusqu'au vendredi
         9 juillet à 10 h 00. L'examen a été noté sur 60 points (au
         lieu de 70).
         23 juin 2004
       
      
      Le cours porte sur les paradigmes de programmation avancés,
      en couvrant notamment :
     
      la Programmation Fonctionnellela Programmation Logique 
      Pour la programmation fonctionnelle on utilisera le langage
      Scala.
      
    
   
   
Semaine 1 (10 mars):
      
	
        Introduction. Programmation impérative : transformeurs de
        prédicats. Programmation fonctionnelle : Scala, environnement
        et évaluation d'une fonction, appel par valeur, appel par nom,
        fonctions imbriquées, portée lexicale. Requêtes XML.
	    (pdf,
	    ps,
	    2on1.ps,
	    4on1.ps).
        
Semaine 2 (17 mars):
      
	
        Programmation fonctionnelle : modèle
	d'évaluation, récursion terminale, définition de valeurs, fonctions d'ordre
        supérieur, fonctions anonymes, currification, types fonctionnels.
	    (pdf,
	    ps,
	    2on1.ps,
	    4on1.ps).
        
Semaine 3 (24 mars):
      
	
          Abstractions de données : objets, méthodes,
          auto-référence, classes et substitutions, opérateurs,
          classes abstraites, extension d'une classe, liaison
          dynamique, classes standards.
	    (pdf,
	    ps,
	    2on1.ps,
	    4on1.ps).
        
Semaine 4 (31 mars):
      
	
   Filtrage de motifs : décomposition OO contre décomposition
   fonctionnelle, classes "cas".  Listes : constructeurs,
   opérations primitives, polymorphisme, concaténation. Exceptions. La
   classe List. Tri de listes, schémas récurrents avec les listes,
   motifs de calcul avec fonctions d'ordre supérieur.
	    (pdf,
	    ps,
	    2on1.ps,
	    4on1.ps).
        
Semaine 5 (7 avril):
      
	
        Fonctions d'ordre supérieur sur les listes. Preuve de
        programmes fonctionnels: induction structurelle.
	    (pdf,
	    ps,
	    2on1.ps,
	    4on1.ps).
        
Semaine 6 (21 avril):
      
   
Semaine 7 (28 avril):
      
        
        Fonctions et objets. Application du filtrage de
        motif à la différentiation symbolique. Décomposition
        orientée-objet et décomposition utilisant le filtrage de
        motif.
	    (pdf,
	    ps,
	    2on1.ps,
	    4on1.ps).
        
Semaine 8 (5 mai):
      
        
          Effets de bord: application à la simulation d'évènements discrets.
	    (pdf,
	    ps,
	    2on1.ps,
	    4on1.ps).
        
Semaine 9 (12 mai):
      
   
Semaine 10 (19 mai):
      
   
Semaine 11 (26 mai):
      
        
          Lisp : présentation du langage, conception d'un
          interpréteur en Scala.
	    (pdf,
	    ps,
	    2on1.ps,
	    4on1.ps).
        
Semaine 12 (1er juin):
      
   
Semaine 13 (8 juin):
      
        
          Programmation logique (1): Prolog, présentation et implémentation (unification).
	    (pdf,
	    ps,
	    2on1.ps,
	    4on1.ps).
        
Semaine 14 (16 juin):
      
        
          Programmation logique (2): Implantation de la
          recherche par retour arrière, traitement de la négation, non
          correction et incomplétude.
	    (pdf,
	    ps,
	    2on1.ps,
	    4on1.ps).
         
    
   
   
     Semaine 1 (10 mars): Racine carré, racine cubique,
     triangle de Pascal.
    Enoncé en
      (pdf) ou
      (ps).
   
     Semaine 2 (17 mars): Factorielle, fibonacci,
     élévation à la puissance.
    Enoncé en
      (pdf) ou
      (ps).
    Semaine 3 (17 mars): Ensembles d'entiers.  Enoncé en
      (pdf) ou
      (ps).
    Squelette: week3.scala.
    Semaine 4 (31 mars): Listes associatives.  Enoncé en
      (pdf) ou
      (ps).
    Semaine 5 (7 avril): Ensemble des parties,
   combinaisons de pièces, addition de grands entiers.  Enoncé en
      (pdf) ou
      (ps).
    Semaine 6 (21 avril): Preuve de l'inversion de listes, problème des n-reines.
    Enoncé en
   (pdf) ou
   (ps).
    Squelette: queens-partial.scala.
   
     Semaine 7 (28 avril): Langage d'images pour les fractales.
   
     Enoncé en
     (pdf) ou
     (ps).
   
     Bibliothèque :
     Vector.scala,
     Frame.scala,
     Graphics.scala,
     PostScript.scala,
     Painter-partial.scala.
   
     Semaine 8 (5 mai): Simulateur de circuit logique.
   
     Enoncé en
     (pdf) ou
     (ps).
   
     Squelette: Simulator-partial.scala.
   
     Semaine 9 (12 mai): Réseaux de contraintes.
   
     Enoncé en
     (pdf) ou
     (ps).
   
     Squelette: solver-partial.scala.
   
     Semaine 10 (19 mai): Fibonacci, ln(2), nombres premiers.
   
     Enoncé en
     (pdf) ou
     (ps).
   
     Squelette: week10-partial.scala.
   
     Semaine 12 (2 juin): Lisp.
   
     Enoncé en
     (pdf) ou
     (ps).
   
     Squelette: lisp-partial.scala.
   
     Semaine 13 (9 juin): Prolog, Lisp.
   
     Enoncé en
     (pdf) ou
     (ps).
   
     Interpréteur Prolog: prolog.scala.
    
   
   Utilisation en salle IN2 (Windows) 
    
   Les instructions pour l'utilisation de
     Scala en salle IN2 se trouvent ici.
   Comment écrire un programme en Scala 
         Pour compiler et exécuter un programme, suivez les instructions sur la page d'
         exemples de Scala.
         Lien de référence 
         Le site web de Scala
         contient toutes les informations utiles au programmeur Scala,
         en particulier la 
         documentation du language et de la bibliothèque standard.
        
    
   Le cours a maintenant son forum de discussion : epfl.ic.cours.programmationIV. 
   N'hésitez pas à y exprimer vos interrogations, vos problèmes.
   D'autres étudiants pourront peut-être vous aider et les assistants
   s'engagent à traiter régulièrement les nouveaux messages. C'est aussi
   par ce biais que nous vous communiquerons des annonces générales concernant le
   cours.
    
   Le plus simple pour accéder au forum est de le faire :
    
   Enfin, si vous avez des questions générales concernant l'utilisation
   des forums de discussion à l'EPFL vous trouverez tout sur le site : Usenet News
    
     Séance de réponses aux questions
      
       Les assistants du cours de programmationIV organisent une
       séance de réponse aux questions pour les étudiants. Elle aura
       lieu le mercredi 16 juin en salle INM202, à la place de la
       séance d'exercice.  Nous collecterons les questions postées sur
       le forum du cours et l'on tentera d'y répondre pendant la
       séance. Vous pouvez aussi poser vos questions directement
       pendant la séance bien sûr.
      
       Voici le déroulement probable de la séance:
        
       Examen blancPremière heure: on reviendra sur l'examen blanc et sur sa correction,
       en essayant de donner une méthodologie pour trouver la solution d'un
       problème de programmation.Deuxième heure: questions libres. 
       Les étudiants peuvent venir récupérer leur copie en salle INR 318.
      
       Finalement, l'examen blanc a été noté sur 30 (au lieu de 43),
       donc pour avoir la note sur 6, étant donné un nombre de points
       N, il faut appliquer la formule suivante : 
       (min(N, 30) / 30 * 5) + 1arrondi au demi-point le plus proche. 
       Pour vous situer par rapport aux autres, voici aussi un petit
       graphique qui montre la
       répartition des étudiants par note.
     Examen final 
     Il aura lieu le 17 juin de 16 h 05 à 18 h 00 dans les salles CO3,
     CO015, CO016 et CO124.
      
     Répartition des étudiants par salle : CO015 (de A à E), CO124 (de
     F à H), CO016 (de J à Mi), CO3 (de Mo à Z).
      
       Consulter les notes sur
       le web ou sur le panneau situé à côté du bureau INR
       319. Vous pouvez venir consulter vos copies dans le bureau INR
       318 jusqu'au vendredi 9 juillet à 10 h 00.
      
      L'examen a été noté sur 60 points (au lieu de 70), donc pour
      avoir la note sur 6, étant donné un nombre de points
      N, il faut appliquer la formule suivante : 
       (min(N, 60) / 60 * 5) + 1arrondi au demi-point le plus proche. 
      Professeur
    Assistants 
      
Philippe Altherr,
           INR318,  35281
Vincent Cremet,
           INR318,  34209
Stéphane Micheloud,
           BC346,  37593
Nikolay Mihaylov,
           INR321,  36864
Matthias Zenger,
           INR321,  36864
Burak Emir,
           INR320,  36867 
      
        Structure and Interpretation of Computer Programs.Harold Abelson and Gerald J. Sussman. 2nd edition. MIT Press 1996.
 Consultable également en ligne.
        Approche Fonctionnelle de la Programmation.Guy Cousineau et Michel Mauny. Ediscience International. 1998.
        Introduction to Functional Programming using Haskell.Richard Bird. Prentice Hall 1998.
        Foundations of Logic Programming.J.W. Lloyd. Springer Verlag. 1984.
        Effective Java.Joshua Bloch. Addison Wesley, 2001.
 |