JP Roy

Programmation en Scheme (niveau 2 (et un peu niveau 3))

L2 Info&Math, Nice, Automne 2016

               

Le cours est terminé !...

Définition : On appelle étudiant de l'option PF2 un étudiant régulièrement inscrit ET qui assiste aux cours et TP !
• Un étudiant redoublant ayant déjà obtenu la moyenne en PF2 NE PEUT PAS s'inscrire à nouveau !
• Le contrôle des connaissances consistera en un projet logiciel (50%) et un examen terminal (50%). Lors de l'examen, les seuls documents autorisés sont le polycopié du cours en version papier, et le livre de cours PCPS. Aucune note manuscrite, aucune solution des TP-TD, aucun téléphone portable ou tablette.
Remise des projets dans une grande enveloppe avec doc papier et clé-usb (on vous la rendra en janvier), le jeudi 8 décembre entre 13h et 15h au 1er étage du dept. informatique (en face de la mare aux canards). N'oubliez pas de déposer votre vidéo sur YouTube à la dernière minute.

AU FIL DU TEMPS...
• Pour l'audio et la vidéo, le navigateur Chrome semble le plus adéquat.
For any HOWTO question specific to Racket (even Rsound as John Clements is often online), subscribe to the Racket Users mailing list, or on the IRC channel #racket. Then ask your question in ENGLISH. Just pretend you are a student, you'll be welcome. Here is an example...
• Le cours 1 a introduit les macros (extensions syntaxiques) en Racket. Il a été question d'hygiène quelque part. Sans doute voudrez-vous regarder cette vidéo sur le sujet, extraite d'un MOOC. Il traite des rapports dangeureux entre les variables locales d'une macro et celles de l'utilisateur de la macro.
• Pour les TP3-4, apportez un casque audio filaire (ou des écouteurs de bonne qualité). Attention aux oreilles, mettez toujours le volume à zéro avant d'écouter un son dont vous n'êtes pas certain de l'amplitude !
• Un exemple de traitement d'exception en Scheme avec read-if-PCM16.rkt : lecture d'un fichier .wav qui n'est pas au format PCM 16 bits, on intercepte l'erreur.
• En jouant avec les signaux audio (network), il est sain de disposer de potentiomètres sous la forme de sliders (cours 6). Hélas la classe slider% de Racket n'est pas compatible avec l'audio pour des raisons complexes. John Clements distribue un fichier katy-sliders que j'ai légèrement adapté, et que vous voudrez peut-être utiliser, modifier, ou étendre.
• La conférence de John Clements à RacketCon 2014, il était manifestement très en forme :-)
• Pour le TP5, voici un exemple musical-turtle.mp4 d'utilisation de la classe turtle% de votre TP5. Dans une sous-classe de turtle%, j'utilise un signal dont la fréquence est réglée sur l'abscisse XCOR de la tortue, avec une modulation d'amplitude dont la basse fréquence varie entre 0.5Hz (en bas) et 8Hz (en haut).
• Une démo de Mark Ronson sur le sampling lors d'un TED talk.
• Regardez cette vidéo sur les fermetures (closures) en Javascript.
• Téléchargez ce document sur les générateurs en Python.
• Michel Buffa (prof à Polytech) a réalisé un ampli de guitare sous la forme d'une pure application Web. Branchez votre guitare et go, go, Johnny, go ! !
• Serait-ce l'influence de Racket ? Java 9 introduit les modules, avec requires et exports. Et peut-être un toplevel ?
• L'examen TERMINAL est corrigé dans exam-pf2-jan-2017.rkt. Idem pour l'examen de RATTRAPAGE corrigé dans exam-pf2-juin-2017.rkt/.
• Pour vous préparer au mieux au cours Paradigmes de L3-Info par Julien Provillard, je vous suggère vivement de vous inscrire au MOOC Programming Languages, qui débute le 26 juin (seul le certificat final est payant, si vous le souhaitez).

A part les séances 3-4, nous étudions en 2ème année, grosso modo, les chapitres 11, 12, 13 et 14 du livre de cours PCPS. Les cours 12, 13 et 14 ci-dessous - plus délicats - ont été enseignés en 3ème année et correspondent aux chapitres 15, 16 et 17 de PCPS. Nous travaillerons en vrai Racket, vous pouvez dire adieu au niveau de langage Etudiant Avancé et au teachpack valrose.rkt. Dans les séances 3-4 consacrées à l'audio, nous aborderons la notion de son, ses caractéristiques informatiques, et les bases d'un synthétiseur (oscillateur, enveloppe, modulation, synthèse additive et soustractive, signaux). Tout ceci de manière élémentaire bien entendu, il faudrait un cours semestriel complet pour y pénétrer complètement (nous ne ferons qu'effleurer l'analyse spectrale).

1. #lang racket  Cours1  TP1  sol1.zip
2. Mutation et Style Impératif (boucles for)  Cours2  TP2  sol2.zip
3. Le Type de Donnée rsound (INSTALL)  Cours3  TP3  sol3.zip
4. Son et Signaux Audio  Cours4  TP4  sol4.zip
5. Objets (adt-turtle.rkt)  Cours5  TP5  sol5.zip
6. Interfaces Graphiques (stuff6.zip)  Cours6  TP6  sol6.zip
7. Polynômes, Graphisme, etc (stuff7.zip)  Cours7  TP7  sol7.zip
8. Chaînes de Caractères et regexp  Cours8  TP8  sol8.rkt
9. Entrées-Sorties et Clients Web (code9.rkt)  Cours9  TP9  sol9.rkt
10. Vecteurs  Cours10  TP10  sol10.zip
11a. Un Mini Interprète Scheme en Scheme (tp11a.rkt)  Cours11A  TP11A  sol11a.rkt
11. Un Mini Interprète Scheme en Python (tp11b.py)  Cours11B  TP11B  sol11b.py
12. La Programmation Paresseuse  Cours12  TP12  sol12.rkt
13. La Syntaxe (code13.zip)  Cours13  TP13  sol13.zip
14. Les Continuations ()  Cours14  TP14  sol14.zip

The spirit of Lisp hacking can be expressed in two sentences :
Programming should be fun. Programs should be beautiful.
    [Paul Graham]

Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary. Scheme demonstrates that a very small number of rules for forming expressions, with no restrictions on how they are composed, suffice to form a practical and efficient programming language that is flexible enough to support most of the major programming paradigms in use today. [R6RS]