Programmation Fonctionnelle : Scheme Jean-Paul Roy, Janvier-Avril 2006 Partie 1, Fondamentaux 1. Primitives (entiers, rationnels, réels, complexes, objets) 2. Fonctions : define et lambda 3. Conditions : if, cond et connecteurs logiques 4. Variables locales : let et let* 5. Itératif et récursif 6. Obtenir la trace d’une fonction 7. Un aperçu du style CPS 8. Listes : constructeur, accesseur, reconnaisseur 9. Listes : représentation 10. Récurrence sur les listes 11. Corrections d’exercices en Scheme (inverser une liste, exponentiation modulaire, primalité, formes spéciales) 44 45 45 46 47 49 49 50 51 51 53 Partie 11, Intermediaire : Les Listes 1. Primitives (listes, A-listes, filtrage, complexes, citations) 2. Fonctions, ordre normal et ordre applicatif 3. Procédures d’ordre supérieur 4. Quelques fonctions sur les listes (map, filtrage, tri-fusion, exercices) 5. Les A-listes et le filtrage avancé 6. Exercices (filtrage, algorithme sur les ensembles) 7. Pour la culture : questions de cours (Algorithme de Wang, Peano, Eliza) 56 57 57 58 61 62 64 Partie 111, Intermediaire : Les Arbres 1. Définir des arbres binaires d’expression 2. Algorithme élémentaire sur les arbres (hauteur, nombre de nœuds, arboriser) 3. Evaluation d’un arbre binaire d’expression 4. Principes d’un simplificateur formel 5. La dérivation symbolique 6. Une introduction à la compilation des arbres 7. La curryfication 8. Quelques développements 66 66 68 68 69 70 74 74 Partie 1V, Intermediaire : Dessin 1. Le principe (commandes de la tortue, graphisme polaire et cartésien) 2. Entrainement à l’utilisation des nouvelles formes spéciales (do, begin…) 3. Graphisme de base (rosace et spirale, degradés) 4. Traceur de courbes paramétriques 5. Intégration d’un élément d’arc le long d’une courbe 6. Une introduction aux fractales 7. Arbres fractals Philippe Giabbanelli 75 76 76 77 78 78 80 Partie V, Avance 1. Primitives indispensables (style impératif, tableaux, entrée/sortie et ports) 2. Fonctions d’arité variable 3. Programmation impérative 4. Valeur d’une λ-expression et fermeture 5. Construction de générateurs 6. Les mémo-fonctions, vers une programmation dans le style objet 7. Tableaux ou vecteurs, algorithme du drapeau hollandais (tri à 3 valeurs) 8. Définir des fonctions locales récursives par letrec 9. Modification impérative des pointeurs 10. Structures circulaires 11. Les entrées-sorties 12. Lecture et écriture dans un fichier disque 13. Utiliser le système d’exploitation (OS) 14. Aller chercher des informations automatiquement sur Internet 81 82 84 85 85 87 89 90 91 93 95 96 98 98 Partie VI, Specialise : Les Macros 1. Le principe (syntaxe, sémantique, quasiquote) 2. define-macro 3. Problèmes d’hygiène dans une substitution textuelle 4. Les macros R5RS : define-syntax 102 103 105 106 « Je ne vous cacherai pas que l'ensemble est *très* décevant. Soit les notes du partiel étaient trop fortes et cela a contribué à démotiver certains pour Scheme (ok l'an prochain le partiel sera un peu plus serré), soit les notes du semestre 1 l'ont fait à la place du partiel, à vous de décider. Il reste que 25 étudiants environ sont au niveau en ce qui me concerne, et c'est peu pour le travail bien plus approfondi qui sera fait en L3 ! » « Comment devenir informaticien si l'on n'est même pas capable de vérifier les types des objets qu'on manipule ??? » « Et s'il y a 10000000 solutions et qu'on s'intéresse seulement à la 3ème ? Mais ceci ne perturbe pas certains, qui veulent quand même devenir informaticiens et gérer les ordinateurs de la Défense Nationale. Tous aux abris ! » Philippe Giabbanelli