INITIATION `
A LA
PROGRAMMATION
FONCTIONNELLE
Myriam Desainte-Catherine
ENSEIRB – LaBRI – Universit´e Bordeaux I
Premi`ere ann´ee ENSEIRB
Bibliographie
Notes de cours personnelles sur la programmation en SCHEME
“Trait´e de Programmation en Common Lisp” de R. Strandh et I. Durand
“Common lisp” Guy Steele, digital Press. ISBN 1-55558-041-6
Table des mati`eres
1 Introduction 6
1.1 Histoire du langage . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.1 Les langages des ann´ees 1950 . . . . . . . . . . . . . . 6
1.1.2 Histoire des langages lisp . . . . . . . . . . . . . . . . . 6
1.2 Autres langages fonctionnels . . . . . . . . . . . . . . . . . . . 7
1.3 Caract´eristiques des langages lisp . . . . . . . . . . . . . . . . 8
1.4 Mod`ele de eveloppement . . . . . . . . . . . . . . . . . . . . 8
1.5 Objectifs p´edagogiques du cours . . . . . . . . . . . . . . . . . 9
1.6 Contrˆole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Survol de la syntaxe du langage 10
2.1 Les expressions . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.1 D´efinition de symboles globaux . . . . . . . . . . . . . 11
2.1.2 ´
Evaluation d’une expression . . . . . . . . . . . . . . . 11
2.2 Types simples . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.1 Les nombres . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.2 Les bool´eens . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.3 Pr´edicats . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.4 Comparaisons . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.5 Op´erations . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 Les symboles . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4 Les chaˆınes de caract`eres . . . . . . . . . . . . . . . . . . . . . 16
2.5 Les expressions sp´eciales . . . . . . . . . . . . . . . . . . . . . 16
2.5.1 Les expressions conditionnelles . . . . . . . . . . . . . . 16
2.5.2 Les expressions avec d´eclarations locales . . . . . . . . 16
3 L’´evaluation 19
3.1 Les environnements . . . . . . . . . . . . . . . . . . . . . . . . 19
2
3.1.1 Port´ees des liaisons . . . . . . . . . . . . . . . . . . . . 19
3.1.2 Dur´ee de vie des liaisons . . . . . . . . . . . . . . . . . 20
3.1.3 Strat´egies de recherche d’une liaison . . . . . . . . . . . 20
3.1.4 Variables lexicales et sp´eciales . . . . . . . . . . . . . . 22
3.2 R´ecursivit´e . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.1 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.2 R´ecursivit´e terminale . . . . . . . . . . . . . . . . . . . 24
4 Listes 27
4.1 Symboles et citations . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.1 La forme quote . . . . . . . . . . . . . . . . . . . . . . 27
4.1.2 Le pr´edicat de type symbolp . . . . . . . . . . . . . . . 27
4.1.3 Egalit´e eq . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2 Les paires poinees . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2.1 L’op´eration cons . . . . . . . . . . . . . . . . . . . . . 28
4.2.2 Les electeurs car et cdr . . . . . . . . . . . . . . . . . 29
4.2.3 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2.4 Pr´edicat consp . . . . . . . . . . . . . . . . . . . . . . 29
4.2.5 Affichage d’une structure complexe . . . . . . . . . . . 29
4.3 Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3.1 D´efinition . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3.2 Pr´edicats listp et endp . . . . . . . . . . . . . . . . . . 29
4.3.3 Pr´edicats d’´egalit´e . . . . . . . . . . . . . . . . . . . . 29
4.3.4 Fonction de construction list . . . . . . . . . . . . . . . 30
4.3.5 Listes et ´evaluation . . . . . . . . . . . . . . . . . . . . 30
4.3.6 Fonctions pr´ed´efinies . . . . . . . . . . . . . . . . . . . 30
4.4 Programmation ecursive sur les listes plates . . . . . . . . . . 31
4.4.1 Premier exemple . . . . . . . . . . . . . . . . . . . . . 31
4.4.2 Autres exemples . . . . . . . . . . . . . . . . . . . . . . 31
4.5 Les listes d’association : a-listes . . . . . . . . . . . . . . . . . 31
4.5.1 D´efinition . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.5.2 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.6 Listes propres . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.7 Structures quelconques . . . . . . . . . . . . . . . . . . . . . . 32
5 Fonctions 34
5.1 Param`etres et retours de fonctions . . . . . . . . . . . . . . . . 34
5.1.1 Liste de param`etres . . . . . . . . . . . . . . . . . . . . 34
3
5.1.2 R´esultat multiple . . . . . . . . . . . . . . . . . . . . . 36
5.2 Les fonctions anonymes . . . . . . . . . . . . . . . . . . . . . . 36
5.2.1 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2.2 Application de λet expressions let . . . . . . . . . . . 37
5.2.3 Autres op´erations sur les λ-expressions . . . . . . . . . 37
5.3 Fonctions et espaces de noms . . . . . . . . . . . . . . . . . . 38
5.3.1 Repr´esentation des symboles . . . . . . . . . . . . . . . 38
5.3.2 ´
Evaluation des symboles . . . . . . . . . . . . . . . . . 39
5.3.3 Espace des noms des fonctions . . . . . . . . . . . . . . 39
5.3.4 Espace des noms de variables . . . . . . . . . . . . . . 40
5.3.5 Fonctions anonymes . . . . . . . . . . . . . . . . . . . 41
6 Fonctionnelles 43
6.1 Fonctions en arguments . . . . . . . . . . . . . . . . . . . . . . 43
6.1.1 Fonctions de biblioth`eque . . . . . . . . . . . . . . . . 43
6.1.2 Fonctionnelles sur les listes . . . . . . . . . . . . . . . . 44
6.2 Fonctions en retour de fonctions . . . . . . . . . . . . . . . . . 47
6.2.1 Un premier exemple : la composition de fonctions . . . 47
6.2.2 Un deuxi`eme exemple : la curryfication . . . . . . . . . 48
6.2.3 Exemples avec ecursivit´e . . . . . . . . . . . . . . . . 49
7 Structures imp´eratives 51
7.1 Modifications d’objets . . . . . . . . . . . . . . . . . . . . . . 51
7.1.1 setf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.1.2 Modification de paires point´ees . . . . . . . . . . . . . 51
7.2 Fonctions modifiant leurs param`etres . . . . . . . . . . . . . . 52
7.2.1 Modifications de param`etres . . . . . . . . . . . . . . . 52
7.2.2 Nconc . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.2.3 Fonctions d’application . . . . . . . . . . . . . . . . . . 53
7.2.4 Partage de la emoire et affectation . . . . . . . . . . 53
7.2.5 Listes circulaires . . . . . . . . . . . . . . . . . . . . . 53
7.2.6 Retour sur les variables sp´eciales . . . . . . . . . . . . 54
7.3 Tableaux et structures . . . . . . . . . . . . . . . . . . . . . . 55
7.3.1 Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.3.2 Structures . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.3.3 Tables de hachage . . . . . . . . . . . . . . . . . . . . . 56
7.4 Structures de contrˆole . . . . . . . . . . . . . . . . . . . . . . 56
7.4.1 Blocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4
7.4.2 Conditionnel . . . . . . . . . . . . . . . . . . . . . . . . 56
7.4.3 It´eration . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.5 Fermetures et affectation . . . . . . . . . . . . . . . . . . . . . 58
7.5.1 G´en´erateurs . . . . . . . . . . . . . . . . . . . . . . . . 58
7.5.2 M´emo-fonctions . . . . . . . . . . . . . . . . . . . . . . 59
8 Macroexpansions 60
8.1 Rappels sur l’´evaluation et l’application . . . . . . . . . . . . . 60
8.1.1 ´
Evaluation applicative . . . . . . . . . . . . . . . . . . 60
8.1.2 ´
Evaluation paresseuse . . . . . . . . . . . . . . . . . . 61
8.1.3 Remplacement textuel . . . . . . . . . . . . . . . . . . 61
8.2 ´
Ecriture de macroexpansions en lisp . . . . . . . . . . . . . . . 62
8.2.1 Citation . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.2.2 D´efinition . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.2.3 Macroexpansion . . . . . . . . . . . . . . . . . . . . . . 62
8.2.4 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . 63
8.3 Probl`emes d’utilisation des macros . . . . . . . . . . . . . . . 63
8.3.1 Captures de noms . . . . . . . . . . . . . . . . . . . . . 63
8.3.2 Renommage . . . . . . . . . . . . . . . . . . . . . . . . 64
8.3.3 ´
Evaluations multiples . . . . . . . . . . . . . . . . . . . 65
8.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5
1 / 66 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 !