Preface
0.1 Objectifs
Ce cours a pour but de pr´esenter une autre facette de l’activit´e de programmation, celle des langages applica-
tifs. Pour cel`a, certains des concepts de base de la programmation, ´eventuellement d´eja vus par l’´etudiant dans
le cadre d’un langage imp´eratif, sont repris sous un angle nouveau. Cependant, la programmation fonctionnelle
couvre un champ d’application relativement distinct de celui de la programmation imp´erative, et nous verrons
que, mˆeme sur des probl`emes similaires, les approches sont relativement diff´erentes.
0.2 Plan de l’ouvrage
Le chapitre 1 effectue un tour sommaire de la programmation fonctionnelle, du lambda calcul jusqu’au
langage Haskell.
Le chapitre 2 est le chapitre introductif `a Scheme. Y sont abord´es la syntaxe et la s´emantique du langage,
ainsi que les aspects num´eriques.
Le chapitre 3 introduit les aspects de manipulations symboliques, ainsi que la structure de base, la liste.
Le chapitre 4 pr´esente les aspects fonctionnels de Scheme : qu’est-ce qu’une fonction, que peut-on faire avec
les fonctions.
Le chapitre 5 propose une analyse, en terme de complexit´e, des caract´eristiques du langage.
Le chapitre 6 introduit la notion de macro-d´efinition, ainsi que certains aspects non fonctionnels du langage :
manipulation de listes, etc.
Le chapitre 7 aborde un aspect particulier de la programmation fonctionnelle : l’´evaluation retard´ee, grˆace
aux promesses et aux flots.
Le chapitre 8 revient sur les structures de contrˆoles, en introduisant la notion de continuation : cr´eation de
continuation, passage explicite de continuation, primitives correspondante du langage.
Le chapitre 9 propose une vision d’une extension classique de Scheme : l’introduction d’objets.
Bibliographie, index, table des mati`eres.
0.3 Mat´eriaux
0.3.1 Le langage
Le langage de programmation particulier utilis´e commme support de la pens´ee dans un cours d’informatique
ne devrait jouer qu’un rˆole tr`es secondaire vis `a vis des concepts enseign´es. Ce n’est malheureusement presque
jamais le cas, et, en particulier dans le cas des “initiations” `a l’informatique, ce choix du langage joue un
rˆole pr´epond´erant. Une mode actuelle consiste `a d´ebuter les enseignements par un cours de programmation
dit “fonctionnelle”. Plusieurs langages r´epondent `a ce crit`ere : les langages de la famille ML comme CAML
([Mau91], [HV92]), Haskell ([HJe92], [HF92]), Miranda ([Tur86]), Gofer, etc.
Nous avons choisi Scheme, qui est plus ancien mais plus r´epandu, pour lequel la litt´erature est beaucoup
plus importante, et surtout qui a fait depuis longtemps ses preuves dans le domaine de la p´edagogie, avec en
particulier le tr`es r´eput´e Structure and Interpretation of Computer Programs, d’Abelson et Sussman ([ASS85],
et dans sa traduction fran¸caise, [ASS89]). Citons encore, entre autres ouvrages consacr´es `a Scheme : [Dyb87],
[SF92], ou [pF86].
A l’heure actuelle, un tr`es grand nombre d’universit´es am´ericaines, dont les plus prestigieuses, une centaine
d’universit´es de par le monde, dont plus d’une vingtaine en France, proposent un ou plusieurs enseignements
reposant sur l’utilisation de Scheme. Cet engouement n’est pas sans raisons. Scheme a en effet peu `a peu acquis,
au sein des ´etablissements d’enseignement, la r´eputation d’un bon langage pour la pr´esentation de la plupart
3