JP Roy
Programmation Fonctionnelle en Scheme (niveau 1)
L1 Info&Math, Nice, Printemps 2017
Le cours est terminé !
Voir Programmation fonctionnelle
Programming should be fun.
Programs should be beautiful.
[Paul Graham]
Le langage utilisé dans ce cours est Scheme [avec le logiciel gratuit Racket]. Il fonctionne à l'identique sous Linux, MacOS et Windows. Pour installer chez soi la dernière version, consulter la rubrique Installation (VERSION minimum 6.6) ainsi que le document teackpack.pdf pour les réglages. La distribution de Racket contient une volumineuse doc en anglais, mais comme avec Python, nous n'en étudierons qu'une très petite portion, grosso modo les chapitres 1, 2, 3, 4, 5, 6, 8, 9, et 10.2 du livre PCPS paru en 2010. Une petite introduction à la musique sur ordinateur sera introduite juste après les listes, histoire de souffler un peu...
Un cours en amphi (1h30), un TD (1h30) et un TP sur machine (1h30) chaque semaine, durant 12 semaines.
• Un travail régulier est attendu. Si vous avez déjà programmé (par exemple en Python), tâchez d'avoir en Scheme un
esprit de débutant, c'est très zen :-)
Ce cours ne suppose en effet aucune connaissance préalable de programmation.
Ne transposez pas à Scheme vos connaissances Python (ou alors seulement les principes algorithmiques purs que vous avez assimilés, comme la dichotomie ou la
décomposition en sous-problèmes), l'état d'esprit sera assez différent, beaucoup plus proche de la pensée mathématique usuelle (hors de question
d'écrire x=x+1, quasiment toutes les fonctions ont un résultat, raisonnement exclusivement par récurrence,
pas de mots-clé while ou for inutiles, etc). Nous allons étudier la programmation fonctionnelle, qui
est assez puriste. |
AU FIL DU TEMPS... |
1. Expressions Préfixées (INSTALL)
Cours1
TP1
sol1.rkt <---
2. Programmer avec des Fonctions
Cours2
TP2
sol2.rkt <---
3. Programmation d'Images Fixes
Cours3
TP3
sol3.zip <---
4. Animations
Cours4
TP4
sol4.rkt <---
5. Programmation par Récurrence
Cours5
TP5
sol5.rkt <---
6. Données Composées : les Listes (anims)
Cours6
TP6
sol6.rkt <---
7. Compléments sur les Listes
Cours7
TP7
sol7.rkt <---
☀ Intro. à l'Audio Numérique (INSTALL)
Cours-Audio
TP-Audio
sol-audio.zip <---
8. Récurrence et Calculs Itératifs
Cours8
TP8
sol8.rkt <---
9. L'Abstraction et l'Ordre Supérieur
Cours9
TP9
sol9.rkt <---
10. Arbres Binaires (1)
Cours10
TP10
sol10.rkt
11. Arbres Binaires (2) et Calcul Formel
Cours11
TP11
sol11.rkt
12. Démonstration Automatique
Cours12
TP12
sol12.rkt
L'Académie des Sciences de Groland voulait savoir si les fourmis préféraient la confiture d'oranges ou celle de fraises. Facile, même pas besoin d'IA, juste le cc1 du groupe 2 avec les fourmis de Francis Avnaim, bref une bonne simulation avec un système de particules en Racket, and the winner is : la FRAISE !
Quelques vidéos d'étudiants des années précédentes (la sonorisation a été faite parfois en Racket, parfois en post-production). Les 2 premières utilisent des systèmes de particules dont il sera question dans le cours 7 (le monde est une liste !). La seconde est due à Léa et la troisième (patience) à Valentin, bravo !
Suite à la demande de plusieurs étudiants sur le problème des collisions, voici une petite animation montrant comment les gérer, avec gravitation et frottements (cf dernier TD Python, en plus élaboré). Le source est dans collisions.zip (avec ou sans la sonorisation).
A gauche, Deborah (2012) avait eu l'idée cette petite animation (que j'ai sonorisée). Pour déclencher des actions à des moments données, elle utilise une timeline en intégrant le nombre de ticks dans le monde. Vous y entendrez les voix de John Kennedy et de Neil Armstrong... A droite, Mohamed (2017) se passionne pour le style math-art, il a codé l'animation de cette belle fractale ! A partir du 13 mars vous pourrez sonoriser vous-même vos animations. En attendant, j'ai opté pour Fractal Zoom de Brian Eno...
Et une petite animation personnelle en guise d'au revoir puisqu'il s'agissait de mon dernier cours en cette année 2016-2017 ! Mettez la sono à donf...
Comme chaque année, une option PF2 [alias Programmation Fonctionnelle Avancée] est ouverte en L2-Informatique et L2-Math. Elle est destinée aux futurs programmeurs, aux futurs ingénieurs, et plus largement à tous les scientifiques souhaitant ajouter une coloration informatique à leurs études. L'option avancée PF2 abordera [en vrai Scheme] les mutations, les macros, les objets, les interfaces graphiques, la musique électronique, la programmation du Web, et bien d'autres choses plaisantes, intellectuelles et agréables... En L3-Informatique, Racket est utilisé dans le cours Paradigmes et Interprétation de Julien Provillard pour comprendre le fonctionnement d'un langage de programmation et les diverses stratégies mises en oeuvre par celui qui construit le langage [on a l'habitude de dire que Racket est un langage de programmation programmable !].
Les langages de programmation ne devraient pas être conçus en empilant des tonnes de choses, mais en supprimant les faiblesses et les restrictions qui rendent toutes ces choses indispensables. Scheme démontre qu'un très petit nombre de règles pour former les expressions, sans aucune restriction sur la manière dont elles sont composées, suffit à former un langage de programmation pratique et efficace, qui soit suffisamment flexible pour accepter la plupart des paradigmes majeurs de programmation utilisés de nos jours. [R6RS] |
sets it free to concentrate on more advanced problems.
[Alfred North Whitehead]