expr - LIG Membres

publicité
11/01/17
1
B) Outils d'analyse et composants du langage
B.II.3) Les types
a) Définition
Type : ensemble de valeurs
et opérations associées
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
2
B) Outils d'analyse et composants du langage
b) Types manipulés en INF201
●
●
●
●
●
●
●
Booléens
Caractères
Chaînes de caractères
Nombres
Textes
Séquences
Arbres
inf201 : algorithmique et programmation fonctionnelle
:
:
:
:
:
:
:
bool
char
string
ℕ, ℤ, ℝ ; int, float
séq(caractères) ; char list
séq(éléments) ; 'elt list
abin(éléments) ; 'elt abin
part. 1 : types, expressions et fonctions
11/01/17
3
B) Outils d'analyse et composants du langage
B.III) Simplification de l'analyse : nommer une expression
En math : « Posons nom = expr »
nom : identificateur
expr : expression
ex : « Posons Δ = √ b −4 ac »
............
... Δ ...
............ »
statut de
a, b, c ?
2
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
4
B) Outils d'analyse et composants du langage
En Ocaml : let nom:type = expr ;;
expr : expression algébrique calculable
type : type de l'expression
nom : identificateur
ex : let delta : float =
b*.b -. 4.0*.a*.c ;;
............. ;;
a, b, c doivent être
... delta ... ;;
liés à des valeurs
............. ;;
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
5
B) Outils d'analyse et composants du langage
# let delta:float =
b*.b -. 4.0*.a*.c ;;
Unbound value b
(valeur b non liée)
# let a = 2.5 ;;
(liaison de a)
val a : float = 2.5
# let b = -1.0/.3.0 ;; (liaison de b)
val b : float = -0.333333333333333315
# let c = 1.23 ;;
(liaison de c)
val c : float = 1.23
# let delta = b*.b -. 4.0*.a*.c ;;
val delta : float = -12.18888888888889
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
6
B) Outils d'analyse et composants du langage
Règles d'évaluation de let nom:t = expr ;;
1) expr est évaluée (calculée) : valexpr
2) liaison entre nom et valexpr
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
7
B) Outils d'analyse et composants du langage
Règles de typage pour let nom:t = expr ;;
1) inférence du type de expr : Texpr
2) vérification de la compatibilité entre t et Texpr
3) assignation du type t à nom
NB : on peut omettre t ; 2) et 3) deviennent :
assignation du type Texpr à nom
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
8
B) Outils d'analyse et composants du langage
Liaisons simultanées :
let nom1:t1 = exp1
and nom2:t2 = exp2
and ... ;;
nom1, nom2, ... : identificateurs
expr1, expr2, ... : expressions algébriques
calculables
t1, t2, ... : types
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
9
B) Outils d'analyse et composants du langage
Ex :
# let a:float
and b:float
and c:float
val a : float
val b : float
val c : float
=
=
=
=
=
=
inf201 : algorithmique et programmation fonctionnelle
2.5
(liaison de a)
-1.0/.3.0 (liaison de b)
1.23 ;;
(liaison de c)
2.5
-0.333333333333333315
1.23
part. 1 : types, expressions et fonctions
11/01/17
10
B) Outils d'analyse et composants du langage
Contre-exemple :
# let x:int = 2
and y:int = 2 * x ;;
(liaison de x)
(liaison de y)
Unbound value x
liaisons simultanées
⇒ valeurs identificateurs inconnues avant ;;
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
11
B) Outils d'analyse et composants du langage
Portée d'un identificateur :
zone(s) du fichier source où
l'identificateur est valide
let nom:t = expr ;;
portée de nom : globale
 nom valide dans tout le fichier source
à partir de ;;
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
12
B) Outils d'analyse et composants du langage
Réduction portée identificateur :
Posons nom = expr dans expr'
let nom:t = expr in expr' ;;
Ex :
# let x:int = 2 in 3*x ;;
- : int = 6
liaison x ↔ 2
# x ;;
locale à 3*x
Unbound value x
inf201 : algorithmique et programmation fonctionnelle
c'est ce qu'on veut
part. 1 : types, expressions et fonctions
11/01/17
13
B) Outils d'analyse et composants du langage
Règles d'évaluation de :
let nom:t = expr in expr' ;;
1) évaluation de expr : valexpr
2) remplacement des nom de expr' par valexpr
3) évaluation de expr' : valexpr' et renvoi de valexpr'
portée de nom : locale à expr'
nom valide uniquement dans expr'
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
14
B) Outils d'analyse et composants du langage
Ex :
# let delta =
(let a = 2.5
liaison a ↔ 2.5
and b = -1.0/.3.0
locale à b*.b -...
and c = 1.23 in
b *. b -. 4.0 *. a *. c) ;;
val delta : float = -12.18888888888889
# a ;;
^
Unbound value a
c'est ce qu'on veut
# delta ;;
- : float = -12.18888888888889
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
15
B) Outils d'analyse et composants du langage
Règles de typage de
let nom:t = expr in expr' ;;
1) inférence du type de expr : Texpr
2) vérification de la compatibilité entre t et Texpr
3) assignation du type t à nom
4) inférence du type de expr' : Texpr'
5) type de l'ensemble du let
(let ... in) : Texpr'
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
16
B) Outils d'analyse et composants du langage
Implanter une fonction = donner un nom à une expr. fonc.
a) identifier des paramètres ; donner leur type
b) nommer l'expression :
let nom (p1:t1) … (pn:tn) : t = expr ;;
où expr : expression algébrique
Ex : implantation de max2 :
let max2 (x:int) (y:int) : int =
if x > y then x else y
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
17
B) Outils d'analyse et composants du langage
Exo :
a) Donner une expr. fonc. calculant la distance à
l'origine d'un point M de coordonnées (x, y)
b) En déduire une réalisation de la fonction :
SPÉCIFICATION
DISTANCE À L'ORIGINE D'UN POINT
Profil
distO : ℝ  ℝ  ℝ+
Sémantique
(distO x y) est la distance à l'origine de M (x,y)
Correction : au tableau
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
18
B) Outils d'analyse et composants du langage
Exo :
a) Étant donnés 2 réels a et b, implanter :
posons m = milieu de [a,b] et d = distance de a à b
dans m – d/2
b) En déduire une réalisation de la fonction :
SPÉCIFICATION
MINIMUM DE 2 VALEURS
Profil
min2 : ℝ  ℝ  ℝ
Sémantique
(min2 a b) est le minimum des nombres a et b
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
11/01/17
23
B) Outils d'analyse et composants du langage
deux points de vues complémentaires :
outils d'analyse ; composants du langage
B.I) Analyse modulaire ; les fonctions
B.II) Briques de base ; les expressions bien typées
B.III) Simplification de l'analyse ; nommer une expression
B.IV) Analyse par cas ; reconnaissance de motifs
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
Téléchargement