48
Algorithmique et Programmation Fonctionnelle (APF) Algorithmique et Programmation Fonctionnelle (APF) RICM3 Cours 1 : Introduction à OCaml Jean-François Monin, Benjamin Wack 2016 - 2017 1 / 31

Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

  • Upload
    vokhue

  • View
    262

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)

Algorithmique et Programmation Fonctionnelle(APF)RICM3

Cours 1 : Introduction à OCaml

Jean-François Monin, Benjamin Wack

2016 - 2017

1 / 31

Page 2: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Présentation du cours

Qui ? Où ? Quand ?Enseignants

I Cours : Jean-François Monin & Benjamin WackI TD groupe 1 : Erwan JahierI TD groupe 2 : Jean-François MoninI TP : Erwan Jahier & Benjamin WackI (échanges ponctuels)

Horaires réguliersI COURS : Mardi 8h-9h30 PolytechI TD : Mardi 9h45-11h45I TP : Mercredi 8h Polytech 009

binômes tirés au hasard (apporter vos machines !)

Consulter ADE 2 / 31

Page 3: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Présentation du cours

Les moyens

Matériel

I Install Party : Linux + OCaml + Tuareg + emacsI Polys de TD et TPI Page Web (outils, planning, documents...)

http://www-verimag.imag.fr/~wack/APF

Ressources recommandées

I http://caml.inria.fr/

I Demander de l’aide aux enseignants

3 / 31

Page 4: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Présentation du cours

Note APF

Note finale = 60 % Devoirs + 40% CC

Devoirs

I 1 DSI 1 Exam

CC

I 1 DMI 8 TPs (quitus global)I 1 Projet (2 TP + travail en autonomie)

4 / 31

Page 5: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Présentation du cours

Les rendus

TP

I Questions préliminaires à préparer avantI Compte-rendu à envoyer par mail lundi matin avant 8hI Correction : revue de code au début du TP suivant

DMÉnoncé distribué une semaine avant

ProjetTP-Projet (2 séances) à rendre à la fin du semestre

Travail non rendu à tempsCopier quelle que soit la source

}⇒ ZERO pour toutes

les personnes impliquées5 / 31

Page 6: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Présentation du cours

Votre travail

Rappel : volume de travail (4 ETCS = 4*24h)

I 15h AmphiI 20h TDI 18h TPI 50h Travail personnel

Travail personnel pour cette UE

I Préparation des TDs suite au coursI Exercices chaque semaine + DMI TP par groupe, préparés à l’avanceI ProjetI révisions...

6 / 31

Page 7: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Présentation du cours

Objectifs du cours

Savoir faire

I Utiliser le paradigme fonctionnel.I Utiliser la récursivité et les structures de données

correspondantes.I Concevoir des algorithmes efficaces et corrects.

Moyens

I Programmation fonctionnelle en Objective Caml.(Caml = Categorical Abstract Machine Language)

I TypageI Raisonnement par récurrence structurelle.I Initiation aux calculs de complexité. 7 / 31

Page 8: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Présentation du cours

Plan

Présentation du cours

Motivations

Expressions et types de base

Définition d’un identifiant

8 / 31

Page 9: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Motivations

Plan

Présentation du cours

Motivations

Expressions et types de base

Définition d’un identifiant

9 / 31

Page 10: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Motivations

Qu’est-ce qu’un programme ?

La traduction d’un algorithme dans un langage commun à l’hommeet à la machine.Qu’est-ce qu’un algorithme ?Une procédure de résolution d’un problème, suffisamentélémentaire pour être exécutée de façon automatique.

10 / 31

Page 11: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Motivations

Qu’est-ce qu’un programme ?La traduction d’un algorithme dans un langage commun à l’hommeet à la machine.

Qu’est-ce qu’un algorithme ?Une procédure de résolution d’un problème, suffisamentélémentaire pour être exécutée de façon automatique.

10 / 31

Page 12: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Motivations

Qu’est-ce qu’un programme ?La traduction d’un algorithme dans un langage commun à l’hommeet à la machine.Qu’est-ce qu’un algorithme ?

Une procédure de résolution d’un problème, suffisamentélémentaire pour être exécutée de façon automatique.

10 / 31

Page 13: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Motivations

Qu’est-ce qu’un programme ?La traduction d’un algorithme dans un langage commun à l’hommeet à la machine.Qu’est-ce qu’un algorithme ?Une procédure de résolution d’un problème, suffisamentélémentaire pour être exécutée de façon automatique.

10 / 31

Page 14: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Motivations

Différents paradigmes de programmation

1. ImpératifFortran (1954), COBOL (1960), C (1970)...

2. FonctionnelLisp (1959), Haskell (1990), Objective CAML (1996)...

3. LogiqueProlog (1972)

11 / 31

Page 15: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)MotivationsProgrammation impérative

Programmation impérative

Centrée sur la notion d’affectationx := E

I x est un emplacement mémoireI E est une expression :

sa valeur v est temporairement associée à x.

x est aussi traditionnellement appelée une variable.

12 / 31

Page 16: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)MotivationsProgrammation impérative

Modèle de calcul

ÉtatDéfinit les données représentées en mémoire à un instant donné.L’état peut être très complexe, utiliser des pointeurs

Les ingrédients des algorithmes

I Une instruction indique une transition d’état.I Combinaisons d’instructions (if, boucles...)

Pour comprendre un programmeIl faut étudier l’effet de toutes les instructions sur toutes les partiesde l’état dans toutes les situations atteignables.Problème : les variables sont de véritables savonettes.

13 / 31

Page 17: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)MotivationsProgrammation impérative

Comprendre un programme

Pour raisonner sur un programmeIl faut étudier l’effet de toutes les instructions sur toutes les partiesde l’état dans toutes les situations atteignables.Problème : les variables sont de véritables savonettes.

Exemplex := 3

Donne x = 3x := x+1

Donne quoi ?

On peut survivreCf. matières A&G et API

14 / 31

Page 18: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)MotivationsProgrammation fonctionnelle

Programmation fonctionnelle

Centrée sur la notion d’expressionToute expression a une valeur et un type.

I Déterminés une fois pour toutes.I La valeur ne dépend pas de l’ordre d’évaluation.

Description d’un algorithme

I Un algorithme est une fonction d’un ensemble de valeurs dansun autre.

I Une fonction est souvent décrite elle-même à partir defonctions (analyse descendante).

I Utilisation intensive de la récursivitéI Manipulation aisée des données grâce au filtrage

(English : pattern-matching)15 / 31

Page 19: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)MotivationsProgrammation fonctionnelle

Comprendre un programme fonctionnel

Raisonnement facilité

I On ne se préoccupe que de la valeur et du type.I Raisonnement par cas sur les différentes valeurs possibles

+ raisonnement par récurrence.I Raisonnement équationnel :

toute expression peut-être remplacée par une expression égale.

Passe plus facilement à l’échelleY compris pour des preuves formelles en présence de donnéescomplexes

16 / 31

Page 20: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)MotivationsProgrammation fonctionnelle

Mythes et réalités sur la programmation fonctionnelle

Ce que l’on évite

I Pas de contrôle : chemins d’exécution indifférentsI Pas de pointeurs : pas de corruption des valeurs

Ce que l’on ne perd pas

I Efficacité : Interpréteur, compilateur → code-octet ou natifI Possibilité d’utiliser des traits impératifs (à bon escient)

Ce que l’on gagne

I Taille du code typiquement 1/10 du code C équivalentI Gestion mémoire automatique

17 / 31

Page 21: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)MotivationsProgrammation fonctionnelle

Prix à payer

Effort

I Changement de perspectiveI Moins adapté à l’embarqué ou à la programmation système de

bas niveau (un peu comme Java)

Support

I Communauté très active dans le « libre »I Bibliothèques en quantité moyenne mais d’excellente qualité

18 / 31

Page 22: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)MotivationsProgrammation fonctionnelle

Un « vrai » langageCaml et ses avatars développés depuis ' 25 ans, principalementdans des laboratoires d’informatique français.Applications

I Domaine de prédilection : traitement symboliqueI analyse de programmes : ASTREE (CNRS & INRIA)I aide à la démonstration : Coq (INRIA)I compilation

I Programmation système : SLAM (Microsoft)I Programmation réseau : MLdonkey (peer to peer

multiplateformes, premier client open source d’eDonkey)I Milieux scientifiques, domaine bancaire (Jane Street)...

Un exemple : est passé de Java à OCaml en cours dedéveloppement pour gagner en robustesse. 19 / 31

Page 23: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)MotivationsProgrammation fonctionnelle

Caractéristiques de OCaml

Expressivité

I Typage statique avec inférence de types et polymorphismeI Types définissables et filtrageI Gestions des exceptions

Développement

I Gestion de la mémoireI Modules paramétrables (foncteur)I Compilateur natif et bytecodeI Système de classe évolué (objets)I Open source

20 / 31

Page 24: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)MotivationsProgrammation fonctionnelle

Programme du Cours

1. Bases de OCaml2. Programmation et preuve par récurrence structurelle3. Analyse syntaxique4. Modularité5. Mécanismes de typage6. Lambda Calcul7. Structures et traits impératifs

21 / 31

Page 25: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Expressions et types de base

Plan

Présentation du cours

Motivations

Expressions et types de base

Définition d’un identifiant

22 / 31

Page 26: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Expressions et types de base

Types de base

I int 42 -12 opérateurs : + - * / modI float -3.1 0. 1.3e-4 opérateurs : +. -. *. /.I bool true false opérateurs : && || not

I et aussi char, string... cf doc. OCaml

Expression = assemblage de constantes et d’opérateursqui respecte les contraintes de type

Chaque opérateur est typé (arguments attendus et valeur calculée).

23 / 31

Page 27: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Expressions et types de base

Types de base

I int 42 -12 opérateurs : + - * / modI float -3.1 0. 1.3e-4 opérateurs : +. -. *. /.I bool true false opérateurs : && || not

I et aussi char, string... cf doc. OCaml

Expression = assemblage de constantes et d’opérateursqui respecte les contraintes de type

Chaque opérateur est typé (arguments attendus et valeur calculée).

23 / 31

Page 28: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Expressions et types de base

Expressions à base d’opérateurs

I 2 + 3I 2.x +. 3.I (2 + 5) * 3I 2 = 5I 2 < 5I true && falseI (2 < 5) && 2 = 5

24 / 31

Page 29: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Expressions et types de base

Expression conditionnelle

I “if b then e1 else e2”I Pas une instruction mais une expression dont la valeur dépend

de b

Exemple : (if 5 < 9 then 21 else 3) * 2 ; ;

I (if 5 < 9 then 21 else 3) *2I (if true then 21 else 3) *2I 21*2I 42

Les opérateurs booléens sont paresseux :Dans e1 && e2 l’expression e2 n’est pas évaluée si e1 vaut falseDans e1 || e2 l’expression e2 n’est pas évaluée si e1 vaut vrai

25 / 31

Page 30: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Expressions et types de base

Expression conditionnelle

I “if b then e1 else e2”I Pas une instruction mais une expression dont la valeur dépend

de b

Exemple : (if 5 < 9 then 21 else 3) * 2 ; ;

I (if 5 < 9 then 21 else 3) *2

I (if true then 21 else 3) *2I 21*2I 42

Les opérateurs booléens sont paresseux :Dans e1 && e2 l’expression e2 n’est pas évaluée si e1 vaut falseDans e1 || e2 l’expression e2 n’est pas évaluée si e1 vaut vrai

25 / 31

Page 31: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Expressions et types de base

Expression conditionnelle

I “if b then e1 else e2”I Pas une instruction mais une expression dont la valeur dépend

de b

Exemple : (if 5 < 9 then 21 else 3) * 2 ; ;

I (if 5 < 9 then 21 else 3) *2I (if true then 21 else 3) *2

I 21*2I 42

Les opérateurs booléens sont paresseux :Dans e1 && e2 l’expression e2 n’est pas évaluée si e1 vaut falseDans e1 || e2 l’expression e2 n’est pas évaluée si e1 vaut vrai

25 / 31

Page 32: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Expressions et types de base

Expression conditionnelle

I “if b then e1 else e2”I Pas une instruction mais une expression dont la valeur dépend

de b

Exemple : (if 5 < 9 then 21 else 3) * 2 ; ;

I (if 5 < 9 then 21 else 3) *2I (if true then 21 else 3) *2I 21*2

I 42

Les opérateurs booléens sont paresseux :Dans e1 && e2 l’expression e2 n’est pas évaluée si e1 vaut falseDans e1 || e2 l’expression e2 n’est pas évaluée si e1 vaut vrai

25 / 31

Page 33: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Expressions et types de base

Expression conditionnelle

I “if b then e1 else e2”I Pas une instruction mais une expression dont la valeur dépend

de b

Exemple : (if 5 < 9 then 21 else 3) * 2 ; ;

I (if 5 < 9 then 21 else 3) *2I (if true then 21 else 3) *2I 21*2I 42

Les opérateurs booléens sont paresseux :Dans e1 && e2 l’expression e2 n’est pas évaluée si e1 vaut falseDans e1 || e2 l’expression e2 n’est pas évaluée si e1 vaut vrai

25 / 31

Page 34: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Expressions et types de base

Expression conditionnelle

I “if b then e1 else e2”I Pas une instruction mais une expression dont la valeur dépend

de b

Exemple : (if 5 < 9 then 21 else 3) * 2 ; ;

I (if 5 < 9 then 21 else 3) *2I (if true then 21 else 3) *2I 21*2I 42

Les opérateurs booléens sont paresseux :Dans e1 && e2 l’expression e2 n’est pas évaluée si e1 vaut falseDans e1 || e2 l’expression e2 n’est pas évaluée si e1 vaut vrai

25 / 31

Page 35: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Plan

Présentation du cours

Motivations

Expressions et types de base

Définition d’un identifiant

26 / 31

Page 36: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Identifiants

Définition d’un identifiant : letlet associe un identifiant à une valeur calculée par une expression

# let x = 53 ; ;val x : int = 53

# let y = x - 11 ; ;val y : int =?

42

ExplicationsI let y = x - 11 ; ;I x est associé à la valeur 53.I donc x - 11 a la valeur de 53 - 11.I val y : int = 42

Pas d’état, pas de variables

27 / 31

Page 37: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Identifiants

Définition d’un identifiant : letlet associe un identifiant à une valeur calculée par une expression

# let x = 53 ; ;val x : int = 53

# let y = x - 11 ; ;val y : int = 42

ExplicationsI let y = x - 11 ; ;I x est associé à la valeur 53.I donc x - 11 a la valeur de 53 - 11.I val y : int = 42

Pas d’état, pas de variables

27 / 31

Page 38: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Identifiants

Définition d’un identifiant : letlet associe un identifiant à une valeur calculée par une expression

# let x = 53 ; ;val x : int = 53

# let y = x - 11 ; ;val y : int = 42

ExplicationsI let y = x - 11 ; ;I x est associé à la valeur 53.I donc x - 11 a la valeur de 53 - 11.I val y : int = 42

Pas d’état, pas de variables27 / 31

Page 39: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Redéfinition d’un identifiant

Un identifiant est un nom donné à une valeur.Exemple# let x = 53 ; ;val x : int = 53# let y = x - 11 ; ;val y : int = 42# let x = 2 ; ;val x : int = 2# y ; ;- : int =?

-9 ou

On peut même écrire let x = x + 1 mais on ne peut pas s’en servirpour calculer (pas de boucles !)

28 / 31

Page 40: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Redéfinition d’un identifiant

Un identifiant est un nom donné à une valeur.Exemple# let x = 53 ; ;val x : int = 53# let y = x - 11 ; ;val y : int = 42# let x = 2 ; ;val x : int = 2# y ; ;- : int =? -9 ou 42

On peut même écrire let x = x + 1 mais on ne peut pas s’en servirpour calculer (pas de boucles !)

28 / 31

Page 41: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Redéfinition d’un identifiant

Un identifiant est un nom donné à une valeur.Exemple# let x = 53 ; ;val x : int = 53# let y = x - 11 ; ;val y : int = 42# let x = 2 ; ;val x : int = 2# y ; ;- : int =? -9 ou 42

On peut même écrire let x = x + 1 mais on ne peut pas s’en servirpour calculer (pas de boucles !)

28 / 31

Page 42: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Redéfinition d’un identifiant

Un identifiant est un nom donné à une valeur.Exemple# let x = 53 ; ;val x : int = 53# let y = x - 11 ; ;val y : int = 42# let x = 2 ; ;val x : int = 2# y ; ;- : int =? -9 ou 42

On peut même écrire let x = x + 1 mais on ne peut pas s’en servirpour calculer (pas de boucles !)

28 / 31

Page 43: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Compléments sur le let

Variantes

I Avec type spécifié let (a : t) = expr ; ;I Définitions multiples let a = 1 and b = 2

Gare à la casse# let eta = 0 ; ;# let eTa = 1 ; ;# eta = eTa ; ;- : bool = false# let Eta = 2 ; ;Error : Unbound constructor Eta

OCaml est sensible à la casse et les initiales majuscules sontréservées.

29 / 31

Page 44: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Compléments sur le let

Variantes

I Avec type spécifié let (a : t) = expr ; ;I Définitions multiples let a = 1 and b = 2

Gare à la casse# let eta = 0 ; ;# let eTa = 1 ; ;# eta = eTa ; ;

- : bool = false# let Eta = 2 ; ;Error : Unbound constructor Eta

OCaml est sensible à la casse et les initiales majuscules sontréservées.

29 / 31

Page 45: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Compléments sur le let

Variantes

I Avec type spécifié let (a : t) = expr ; ;I Définitions multiples let a = 1 and b = 2

Gare à la casse# let eta = 0 ; ;# let eTa = 1 ; ;# eta = eTa ; ;- : bool = false

# let Eta = 2 ; ;Error : Unbound constructor Eta

OCaml est sensible à la casse et les initiales majuscules sontréservées.

29 / 31

Page 46: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Compléments sur le let

Variantes

I Avec type spécifié let (a : t) = expr ; ;I Définitions multiples let a = 1 and b = 2

Gare à la casse# let eta = 0 ; ;# let eTa = 1 ; ;# eta = eTa ; ;- : bool = false# let Eta = 2 ; ;Error : Unbound constructor Eta

OCaml est sensible à la casse et les initiales majuscules sontréservées. 29 / 31

Page 47: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Let localLe let précédent introduit une définition globalequi lie un nom à la valeur d’une expressionlet a = expr1expr2⇒ a reste disponible

Définition localeUne expression peut elle même commencer par une définitionlocale : identifiant visible uniquement dans cette expression

let a = expr1 in expr2

⇒ expr1 écrite et évaluée une seule fois⇒ Ce a est disponible seulement dans expr2, puis est oublié

évite des collisions⇒ Nb : let a = expr1 in expr2 est une expression 30 / 31

Page 48: Algorithmique et Programmation Fonctionnelle (APF) - RICM3 Cours

Algorithmique et Programmation Fonctionnelle (APF)Définition d’un identifiant

Bibliographie

I Xavier Leroy et al. Objective Caml manual http://caml.inria.fr/pub/docs/manual-ocaml/index.html

I The book Developing Applications With Objective Caml (byEmmanuel Chailloux, Pascal Manoury and Bruno Pagano)

I Approche fonctionnelle de la programmation, Michel Mauny ,Guy Cousineau

I Pierre Weis and Xavier Leroy. Le langage Caml. Dunod, 1999.I Apprentissage de la programmation avec OCaml Catherine

Dubois & Valérie Ménissier-MorainI Philippe Nardel. Programmation fonctionnelle, générique et

objet : Une introduction avec le langage OCaml. Vuibert, 2005I Louis Gacogne. Programmation par l’exemple en Caml.

Ellipse, 2004

31 / 31