UE D - Programmation fonctionnelle

publicité
UE D - Programmation fonctionnelle
Chapitre 2
Bases du CAML
Université Blaise Pascal
Plan
●
Caractéristiques de Caml
●
Bases de la programmation Caml
●
Types de base
●
Définition de constantes
●
Expressions conditionnelles
Université Blaise Pascal
1. Caractéristiques de Caml
●
●
Caml = Categorical Abstract Machine
Language, 1985
–
développé en France par l'Inria
–
Lisp = List Processing, 1960
–
ML = Meta Language, 1980
Origine du nom
–
CAM : machine abstraite permettant de définir et
d'exécuter des fonctions
–
ML : langage fonctionnel, avec inférence de types
et filtrage
Université Blaise Pascal
1. Caractéristiques de Caml
●
Langage
–
●
Fonctionnel
–
●
ensemble de règles de syntaxe et de sémantique
basé sur la notion de fonctions (plutôt que sur la
notion d'instructions)
À évaluation stricte
–
les paramètres d'une fonction sont évalués avant
l'appel de la fonction
–
exemple : pour calculer f(3+2), on calcule d'abord
3+2, puis f(3+2)
Université Blaise Pascal
1. Caractéristiques de Caml
●
●
Fortement typé
–
les types sont vérifiés pour éviter les ambiguités
–
par exemple, quand on ajoute deux nombres, on
doit savoir si ces nombres sont des entiers ou des
réels
À inférence de types
–
les types sont déduits
Université Blaise Pascal
1. Caractéristiques de Caml
●
Exemples de programmes réalisés en Caml
–
MLDonkey : logiciel de téléchargement pair à pair
–
Coq : assistant de preuves
–
Astrée : analyseur permettant d'éviter les erreurs
d'exécution
–
FFTW : librairie C permettant de faire des
transformées de Fourier, utilisant un optimiseur
réalisé en Caml
Université Blaise Pascal
2. Bases de la programmation Caml
●
Cycle de la programmation
●
En pratique
Université Blaise Pascal
2.1 Cycle de la programmation
réflexion
Algorithme
éd
o
iti
éd
n
itio
n
Problème
Code source
Tests
Programme
test
compilation exécution
interprétation
Code source
s co
co t e
n
c st
l
ua s
n
ts
ants
nclu
Tests
Université
Blaise Pascal
Solution
2.1 Cycle de la programmation
●
●
Deux méthodes
–
interprétation
–
compilation / exécution
Interprétation
–
avantages : cycle de programmation plus court, un
seul outil (l'interpréteur) pour éditer et exécuter
–
inconvénients : nécessite la présence d'un
interpréteur sur la machine, exécution peu efficace
–
conclusion : utile pour la conception du programme,
mais pas pour sa diffusion
Université Blaise Pascal
2.1 Cycle de la programmation
●
Compilation / exécution
–
avantages : exécution efficace
–
inconvénients : cycle de programmation plus long,
nécessite l'utilisation de plusieurs outils (un éditeur
de textes, un compilateur, un exécuteur)
–
conclusion : utile pour la diffusion du programme,
mais pas pour sa conception
Université Blaise Pascal
2.2 En pratique
●
Dans cette UE : méthode par interprétation
●
Exemple de session
–
lancement d'un terminal
user: ~$ ocaml
–
# 1+1;;
–
­ : int = 2
–
# exit(0);;
–
user: ~$ exit
–
Université Blaise Pascal
2.2 En pratique
●
●
À noter de manière générale
–
invite du terminal / invite de l'interpréteur
–
fonctionnement interactif de type question/réponse
(à la fois du terminal et de l'interpréteur)
À noter concernant la syntaxe Caml
–
les commandes terminent par ;;
–
l'interpréteur a calculé le résultat de 1+1
–
exit(0);; ressemble à l'appel d'une fonction
mathématique appelée exit avec le paramètre 0
Université Blaise Pascal
2.2 En pratique
●
Commentaires
–
ignorés par l'interpréteur
–
commencent avec (*
–
finissent avec *)
–
peuvent être imbriqués
Université Blaise Pascal
3. Types de base
●
●
Type
–
ensemble de valeurs
–
ensemble d'opérations sur ces valeurs
Type entier = int
–
sous-ensemble des entiers
–
valeurs : 0, 1, 2, ­7, 14, ...
–
opérations : +, ­, *, /, mod, float_of_int,
char_of_int, ...
Université Blaise Pascal
3. Types de base
●
Type réel = float
–
sous-ensemble des réels
–
valeurs : 3.14, 2.0, ­9.99, ...
–
opérations : +., ­., *., /., cos, sin, tan,
acos, int_of_float, ...
Université Blaise Pascal
3. Types de base
●
Type caractère = char
–
ensemble des caractères
–
valeurs : 'a', 'b', 'A', '0', '1', ' ', '\n',
...
–
opérations : int_of_char, ...
–
ASCII
Université Blaise Pascal
3. Types de base
●
Type chaîne de caractères = string
–
ensemble des chaînes de caractères (= textes)
–
valeurs : "bonjour", "Le chameau",
"123", "", ...
–
opération : ^ (concaténation), .[n] (extraction du
n-ème caractère de la chaîne)
Université Blaise Pascal
3. Types de base
●
●
Type binaire (booléen) = bool
–
ensemble de deux valeurs
–
valeurs : true, false
–
opérations : not, &&, ||
Type unaire = unit
–
ensemble d'une valeur
–
valeur : ()
–
opération : aucune
Université Blaise Pascal
3. Types de base
●
Rappel : Caml fait de l'inférence de types
–
●
Caml découvre lui-même le type en fonction des
valeurs et des opérations utilisées
Exemple :
–
# 1+1;;
–
­ : int = 2
Université Blaise Pascal
3. Types de base
●
Rappel : Caml est fortement typé
–
●
Caml nécessite que les valeurs et les opérations
utilisées concernent le même type
Exemple :
–
# 1+3.14;;
–
This expression has type float but is here used with type int
–
# 1+.3.14;;
–
This expression has type int but is here used with type int
Université Blaise Pascal
4. Définitions de constantes
●
Définitions simples
●
Définitions parallèles
●
Définitions imbriquées
Université Blaise Pascal
4.1 Définitions simples
●
●
Constante
–
nom
–
valeur
–
type (inféré par Caml)
Exemple en mathématique :
–
soit pi = 3.14
–
posons x = 12
Université Blaise Pascal
4.1 Définitions simples
●
Syntaxe :
–
●
let identificateur = valeur;;
Exemple :
–
# let pi = 3.14;;
–
val pi : float = 3.14
–
# let x = 12;;
–
val x : int = 12
Université Blaise Pascal
4.1 Définitions simples
●
Identificateurs = nom de la constante
–
commence par une lettre minuscule
–
composé de lettres (minuscules ou majuscules), de
chiffres, ou du caractère _
Université Blaise Pascal
4.2 Définitions parallèles
●
Syntaxe :
–
●
●
let id1 = val1 and id2 = val2;;
Exemple :
–
# let a = 1 and b = 2;;
–
val a : int = 1
–
val b : int = 2
La définition des variables se fait en parallèle
(sans ordre)
Université Blaise Pascal
4.3 Définitions imbriquées
●
Syntaxe :
–
●
let id1 = val1 in id2 = val2;;
Exemple :
–
# let r = 10. and pi = 3.14 in pi*.r*.r;;
–
­ : float = 314.
Université Blaise Pascal
4.3 Définitions imbriquées
●
Exemple de multiples définitions imbriquées :
–
# let x=10 in let x=10+x in let x=20+x in 30+x;;
–
­ : int = 70
–
# let x=10 in let x=20 and y=x in x+y;;
–
­ : int = 30
Université Blaise Pascal
5. Expressions conditionnelles
●
Syntaxe :
–
●
●
if expr1 then expr2 else expr3;;
Remarque :
–
expr1 doit être de type booléen
–
expr2 et expr3 doivent être de même type
Exemple
–
# if cos(3.14/.2.)<sin(3.14/.5.) then true else false;
–
­ : int = 1
Université Blaise Pascal
Téléchargement