TD Programmation fonctionnelle CS-110

Chapitre 1 : Langage des expressions et des fonctions




Introduction

Le cours CS-110 est un cours d'introduction à l'algorithmique. Vous apprenez à créer de "beaux" programmes, concis dans leur expression, généraux dans leur application et facilement compréhensibles. Ce but est atteint par l'introduction de techniques d'abstraction et l'utilisation d'un langage de programmation, CAML, ayant une syntaxe très simple. Vous apprenez ainsi dans ce cours des techniques de raisonnement applicables ensuite avec n'importe quel langage de programmation.

Les travaux dirigés du cours CS-110 vont vous permettre d'approfondir et d'appliquer les notions vues en cours. Le but de ces TDs est donc que vous compreniez vraiment le cours de programmation fonctionnelle et les raisonnements effectués. N'hésitez donc pas à me poser des questions si quelque chose n'est pas clair au niveau du cours ou dans un exercice. On est ensemble pour faire des erreurs dans les exercices, comprendre ces erreurs et ainsi comprendre le cours plus en profondeur.

Si vous rencontrez une difficulté quelconque sur un exercice lorsque vous travaillez en dehors des séances, n'hésitez pas à m'envoyer un mail (Anne.Benoit@imag.fr) pour pouvoir en discuter, et pouvoir faire pendant les séances des exercices supplémentaires sur les points qui ne vous paraissent pas clairs. C'est en effet en creusant les difficultés que vous rencontrez que vous pourrez au mieux comprendre et assimiler le cours.

Rappels de notations

En programmation fonctionnelle, on manipule des expressions et des fonctions. Les expressions peuvent être de différents types. Nous commençons par exposer ces types. Nous présentons ensuite la notion d'expression, puis la notion de fonction.

Type d'une expression

Types de base

Types construits

Ces types sont construits à partir des types de base.

Les Expressions

Une expression a un type et une valeur. $1$, $2.3$, $''toto''$ sont des expressions de base. On peut créer des expressions plus complexes en utilisant des opérateurs, de la désignation d'expressions ou des conditionnelles, comme nous le détaillons ci-dessous.

Opérateurs

Désignation d'expressions

Pour clarifier la compréhension d'une expression, il est souvent utile de nommer une sous-expression et de l'utiliser ensuite dans une autre expression.

Dans tous les cas, l'expression soit ... dans $F$ est du type de l'expression $F$, et elle a la valeur de l'expression $F$ évaluée dans un certain contexte. Nous abordons ici la notion de ``portée'' d'une variable, présente dans tout langage de programmation. Les exercices de TD puis de TP permettent de mieux comprendre cette notion.

Expression conditionnelle

La notion d'expression conditionnelle tient une place importante dans la programmation fonctionnelle.

Les fonctions

Il est important de remarquer qu'il existe plusieurs façons de passer un n-uplet de types en paramètre d'une fonction. Nous illustrons ceci sur un exemple :
diff : <un entier, un entier> $\rightarrow$ un entier { différence entre les deux entiers }
Première réalisation : diff(<a, b>) : b - a
Deuxième réalisation : diff(I) : soit <a, b> = I dans b - a
Anne Benoit - Septembre 2001