couleur, 1 diapo sur 1 page

publicité
18/01/17
1
B) Outils d'analyse et composants du langage
deux points de vues complémentaires :
outils d'analyse ; composants du langage
B.I) Briques de base ; les expressions bien typées
B.II) Simplification de l'analyse ; nommer une expression
B.III) Analyse modulaire ; les fonctions
B.IV) Analyse par cas ; reconnaissance de motifs
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
2
B) Outils d'analyse et composants du langage
B.IV) Analyse par cas et reconnaissance de motifs
Considérons un feux tricolore à trois états
●
état 1 : le feux est rouge
●
état 2 : le feux est orange clignotant
●
état 3 : le feux est vert
DÉFINITION D'UN ENS
feux tricolore
feux3 = {1, 2, 3}
déf
implémentation
type feux3 = int (* restreint à 1, 2 et 3 *)
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
3
B) Outils d'analyse et composants du langage
Expression algébrique affichant la couleur de f:feux3 ?
Solution 1 :
Analyse par cas grâce à la composition conditionnelle
if f = 1 then "rouge"
else if f = 2 then "orange clignotant"
else (* nécessairement f = 3 *) "vert"
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
4
B) Outils d'analyse et composants du langage
Expression algébrique affichant la couleur de f:feux3 ?
Solution 2 :
Analyse par cas grâce à la reconnaissance (ou
filtrage) de motifs («pattern matching» en anglais)
reconnaître f parmi les motifs suivants :
●
motif 1 reconnu → renvoyer "rouge"
●
motif 2 reconnu → renvoyer "orange clignotant"
●
motif 3 reconnu → renvoyer "vert"
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
5
B) Outils d'analyse et composants du langage
Expression algébrique affichant la couleur de f:feux3 ?
Solution 2 :
Analyse par cas grâce à la reconnaissance de motifs
match f with
| 1 -> "rouge"
| 2 -> "orange clignotant"
| 3 -> "vert"
On dit aussi que match ... with opére un filtrage
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
6
B) Outils d'analyse et composants du langage
NB : composition conditionnelle =
cas particulier de filtrage sur motifs booléens
if expr_bool then
<partie_alors>
else
match expr_bool with
⇔
<partie_sinon>
inf201 : algorithmique et programmation fonctionnelle
| true
-> <partie_alors>
| false -> <partie_sinon>
part. 1 : types, expressions et fonctions
18/01/17
7
B) Outils d'analyse et composants du langage
Ex : maximum de 2 valeurs
if x < y then
y
else
match x < y with
⇔
x
| true
-> y
| false -> x
☞ On préfèrera la composition
conditionnelle au filtrage en cas de motifs
booléens !
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
8
B) Outils d'analyse et composants du langage
match expr with
Règles de typage
de :
| motif1 -> expr1
| ...
| motifn -> exprn
1) inférence des types de expr, motif1, ...,
motifn
2) vérification de la compatibilité de ces types
3) inférence des types de expr1, ..., exprn
4) vérification de la compatibilité de ces types : T expri
5) type de l'ensemble du filtrage :
(match ... with) : Texpri
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
9
B) Outils d'analyse et composants du langage
match f with
Exemple :
| 1 -> "rouge"
| 2 -> "orange clignotant"
| 3 -> "vert"
1) inférence des types de f (feux3) et 1, 2, 3 (ℕ)
2) ces types sont compatibles :
feux3 est un synonyme du type entier
3) inférence des types de "rouge", ..., "vert" (chaîne)
4) vérification de la compatibilité de ces types
5) type de l'ensemble du filtrage :
(match ... with) : chaîne
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
10
B) Outils d'analyse et composants du langage
Exo : spécifier puis réaliser la fonction transformant
un caractère en l'entier correspondant grâce à un
filtrage
On pourra s'appuyer sur la hiérarchie de types
suivante :
DÉFINITION D'ENSEMBLES
déf
chiffreCar = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
chiffreEnt = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Correction : au tableau
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
11
B) Outils d'analyse et composants du langage
Contre-exemple : soit c un caractère.
Le filtrage suivant n'est pas typable :
match '0' <= c && c <= '9' with
| true
-> int_of_char(c) - int_of_char('0')
| false -> "ce n'est pas un chiffre"
------------------------This expression has type string
but is here used with type int
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
12
B) Outils d'analyse et composants du langage
match expr with
Règles d'évaluation de :
| motif1 -> expr1
| ...
| motifn -> exprn
1) évaluation de expr : valexpr
2) évaluation de motif1 : valmotif1
3) si valmotif1 reconnaît valexpr renvoyer expr1 et arrêter,
sinon recommencer l'étape 2) avec motif2, ...
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
13
B) Outils d'analyse et composants du langage
Exemple :
let f:feux3 = 2 ;;
match f with
| 1
-> "rouge"
| 1+1 -> "orange clignotant"
| 3
-> "vert"
1) évaluation de f donne 2
2) évaluation de 1 donne 1 ; 1 ne reconnaît pas 2
3) évaluation de 1+1 donne 2 ; 2 reconnaît 2 arrêt et
renvoi de "orange clignotant"
Motif 3 non examiné
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
14
B) Outils d'analyse et composants du langage
Regroupement de motifs possible :
match f with
| 1|2 -> freiner()
| 3
-> continuer()
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
15
B) Outils d'analyse et composants du langage
match expr with
Règle de complétude de :
| motif1 -> expr1
| ...
| motifn -> exprn
motif1, ..., motifn doivent couvrir tous les cas
possibles pour expr
On dit que le filtrage doit être exhaustif
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
16
B) Outils d'analyse et composants du langage
Attention aux motifs manquants : filtrage non exhaustif
Ex : nombres de jours d'un mois de l'année
SPÉCIFICATION
Sémantique
les mois de l'année
Définition
mois = {1, ..., 12 }
Implantation
type mois = int
(* restreint à 1, ..., 12 *)
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
17
B) Outils d'analyse et composants du langage
SPÉCIFICATION
NOMBRE DE JOURS D'UN MOIS
Profil
nbjours : mois  ℕ
Sémantique
nbjours (m) est le nombre de jours du
mois m dans une année non bissextile
(a) nbjours(1) = 31
(b) nbjours(2) = 28
(c) nbjours(4) = 30
Ex et prop
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
18
B) Outils d'analyse et composants du langage
RÉALISATION
Algorithme
analyse par cas par
reconnaissance de motifs
Implantation : incorrecte bien que correctement typée!
type mois = int (* restreint à 1, ..., 12 *)
let nbjours (m:mois) : int =
match m with
| 1|3|5|7|8|10|12 -> 31
| 4|6|9
-> 30
| 2
-> 28
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
19
B) Outils d'analyse et composants du langage
RÉALISATION
Tests :
# nbjours(1) = 31 ;; - : bool =
# nbjours(2) = 28 ;; - : bool =
# nbjours(4) = 30 ;; - : bool =
# nbjours(11) = 30 ;; Exception:
true
true
true
Match_failure
Filtrage non exhaustif : il manque un motif !
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
20
B) Outils d'analyse et composants du langage
Implantation correcte :
let nbjours (m:mois) : int =
match m with
| 1|3|5|7|8|10|12 -> 31
| 4|6|9|11
-> 30
| 2
-> 28
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
21
B) Outils d'analyse et composants du langage
RÉALISATION
Tests :
# nbjours
# nbjours
# nbjours
# nbjours
1 = 31 ;;
2 = 28 ;;
4 = 30 ;;
11 = 30 ;;
-
:
:
:
:
bool
bool
bool
bool
=
=
=
=
true
true
true
true
OK
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
22
B) Outils d'analyse et composants du langage
Remarque : filtrage non exhaustif normal, et autorisé
implémentation dégradée de mois = {1, ..., 12} en int
⇒ avertissement normal de l'interpréteur :
# let nbjours (m:mois) : int =
match m with
| 1|3|5|7|8|10|12 -> 31
| 4|6|9|11
-> 30
| 2
-> 28
Warning: pattern-matching non exhaustive.
Example of a value that is not matched: 0
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
23
B) Outils d'analyse et composants du langage
Le motif anonyme : _ = tous les autres motifs
Ex : nature d'une lettre minuscule
SPÉCIFICATION
Profil
Ex et prop
natureLettre : minuscule  string
(a) natureLettre('e') = "voyelle"
(b) natureLettre('y') = "semi-voyelle"
(c) natureLettre('b') = "consonne"
inf201 : algorithmique et programmation fonctionnelle
part. 1 : types, expressions et fonctions
18/01/17
24
B) Outils d'analyse et composants du langage
Le motif anonyme : _ = tous les autres motifs
type minuscule = char (* restreint aux minuscules *)
let natureLettre (lettre:minuscule) : string =
match lettre with
| 'a'|'e'|'i'|'o'|'u' -> "voyelle"
| 'y'|'w'
-> "semi-voyelle"
| _
-> "consonne"
# natureLettre 'e' ;;
# natureLettre 'b' ;;
inf201 : algorithmique et programmation fonctionnelle
- : string = "voyelle"
- : string = "consonne"
part. 1 : types, expressions et fonctions
18/01/17
25
B) Outils d'analyse et composants du langage
ATTENTION à l'utilisation du motif anonyme
Revenons à la version incorrecte de nbjours
let nbjours (m:mois) : int =
match m with
| 1|3|5|7|8|10|12 -> 31
| 4|6|9
-> 30
| _ (* février *) -> 28
# nbjours(2) = 28 ;;
# nbjours(11) = 30 ;;
# nbjours(11) ;;
inf201 : algorithmique et programmation fonctionnelle
- : bool = true
- : bool = false
- : int = 28
???
!!!
part. 1 : types, expressions et fonctions
18/01/17
26
B) Outils d'analyse et composants du langage
Le motif _ rend le filtrage artificiellement exhaustif.
 L'avertissement (pattern-matching non-exhaustive)
de l'interpréteur dispararaît!
☞ le programmeur doit assurer l'exhaustivité du filtrage
let nbjours (m:mois) : int =
match m with
| 1|3|5|7|8|10|12 -> 31
| 4|6|9|11
-> 30
| _ (* février *) -> 28
# nbjours(2) = 28 ;;
# nbjours(11) = 30 ;;
inf201 : algorithmique et programmation fonctionnelle
- : bool = true
- : bool = true
OK
part. 1 : types, expressions et fonctions
18/01/17
27
B) Outils d'analyse et composants du langage
Langages au typage strict et statique
(Ocaml, ...) :
 erreurs conceptuelles
détectées à la mise au point
Langages au typage relâché et/ou dynamique
(C, Java, PHP, Pyhton ...) :
 erreurs conceptuelles
non détectées ; plantage à l'exécution
(segmentation error, arithmetic error, ...)
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
28
C) Modélisation de l'information
Pourquoi modéliser ? Ex :
 Pourquoi classer les mots selon leur nature
(nom, verbe, article, ...) ?
 Pourquoi les définir dans un dictionnaire ?
 Pourquoi les y ranger alphabétiquement ?
Comment modéliser ?
 en définissant des types de données
 en définissant des fonctions les manipulant
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
29
C) Modélisation de l'information
C.1)
C.2)
C.3)
C.4)
C.5)
Nommer et définir un nouveau type
Type synonyme
Type énuméré
Type produit
Type somme
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
30
C) Modélisation de l'information
C.1) Nommer et définir un nouveau type
Présentation systématique :
DÉFINITION MATHÉMATIQUE D'UN ENSEMBLE
déf
t=…
DÉFINITION INFORMATIQUE D'UN TYPE
type t = …
(* contrainte *)
Exemple :
DÉFINITION MATHÉMATIQUE D'UN ENSEMBLE
déf
texte = séq(caractères)
DÉFINITION INFORMATIQUE D'UN TYPE
type texte = char list
inf201 : algorithmique et programmation fonctionnelle
(voir cours 5 et 6)
chap. 1 : expression fonctionnelle
18/01/17
31
C) Modélisation de l'information
C.2) Types synonymes
Exemple :
DÉFINITIONS MATHÉMATIQUES D'ENSEMBLES
déf
déf
prix = ℝ*+
taux = {0, ..., 99}
DÉFINITIONS INFORMATIQUES DE TYPES
type prix = float (* > 0 *)
type taux = int (* restreint à 0, ..., 99 *)
prix est un synonyme de : float (* > 0 *)
taux est un synonyme de : int (* restreint à ... *)
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
32
C) Modélisation de l'information
SPÉCIFICATION
PRIX AVEC RÉDUCTION
Profil
prixRéduit : prix → taux  prix
Sémantique
(prixRéduit p t) correspond à p réduit de t%
Ex et prop
(prixRéduit 100 25) = 75
Profil :
prixRéduit : prix → taux → prix
beaucoup plus explicite que le profil anonyme :
prixRéduit : float → int → float
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
33
C) Modélisation de l'information
RÉALISATION
PRIX AVEC RÉDUCTION
Implantation :
let prixRéduit (p:prix) (t:taux) : prix =
let réduc = p *. (float_of_int t) /. 100.0
in p -. réduc
Tests :
# let p1:prix = 100.0 and t1:taux = 25
in prixRéduit p1 p1 ;;
This expression has type prix
but is here used with type taux
Type prix=float not compatible with type taux=int
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
34
C) Modélisation de l'information
Message d'erreur :
This expression has type prix
but is here used with type taux
Type prix=float not compatible with type taux=int
beaucoup plus explicite que le message anonyme :
This expression has type float
but is here used with type int
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
35
C) Modélisation de l'information
C.3) Types énumérés
Exemple : on appelle enseigne dans un jeu de cartes ♠, ♣, ♥, ♦
DÉFINITION MATHÉMATIQUE D'UN ENSEMBLE
déf
enseigne = {♠, ♣, ♥, ♦}
DÉFINITION INFORMATIQUE D'UN TYPE
type enseigne = Pique|Trèfle|Coeur|Carreau ;;
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
36
C) Modélisation de l'information
C.3) Types énumérés
●
●
●
enseigne est un ensemble défini par énumération
enseigne est un type énuméré
Que sont Pique, ..., Carreau ?
pas des chaînes (manque les ")
pas des variables (pas de let Pique = ...)
☞ constantes symboliques
# "Pique" ;;
- : string = Pique
# Pique ;;
- : enseigne = Pique
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
37
C) Modélisation de l'information
C.3) Types énumérés
Pique, ..., Carreau sont de type enseigne
Pique, ..., Carreau construisent des valeurs de type
enseigne
☞ Pique, ..., Carreau sont des constructeurs de valeurs
Propriété :
Les constructeurs de valeurs sont uniques :
# Pique = Trèfle
- : bool = false
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
38
C) Modélisation de l'information
C.3) Types énumérés
Analyse par cas des valeurs d'un type énuméré :
expression conditionnelle ou filtrage
Exemple :
SPÉCIFICATION
Couleur d'une enseigne
Profil
couleurEns : enseigne  string
Sémantique
couleurEns (e) est la couleur de e
Ex et prop
(couleurEns ♦) = "rouge"
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
39
C) Modélisation de l'information
C.3) Types énumérés
RÉALISATION
Couleur d'une enseigne
Algorithme 1 : analyse par cas par composition conditionnelle
Implantation 1 :
let couleurEns1 (e:enseigne) : string =
if e=Carreau || e=Coeur then
"rouge"
else (* nécessairement, e=Pique ou Trèfle *)
"noir"
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
40
C) Modélisation de l'information
C.3) Types énumérés
RÉALISATION
Algorithme 2 :
Couleur d'une enseigne
analyse par cas par filtrage
Implantation 2 :
let couleurEns2 (e:enseigne) : string =
match e with
| Carreau|Coeur -> "rouge"
| Pique|Trèfle -> "noir"
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
41
C) Modélisation de l'information
C.3) Types énumérés
Exercice : amélioration de la modélisation des cartes
Q0) Définir un type énuméré modélisant la couleur
des enseignes
Q1) Donner la nouvelle spécification de couleurEns
Q2) Donner la nouvelle réalisation de couleurEns
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
42
C) Modélisation de l'information
C.1)
C.2)
C.3)
C.4)
C.5)
Nommer et définir un nouveau type
Type synonyme
Type énuméré
Type produit
Type somme
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
43
C) Modélisation de l'information
Rappels (inf111)
Math
●
produit cart. d'ens. :
E1 x ... x En
Info
●
où t1, ..., tn types
où E1, ..., En ensembles
●
éléments d'un produit :
vecteurs
(e1, ..., en) ∈ E1 x ... x En
inf201 : algorithmique et programmation fonctionnelle
produit cart. de types :
t1 * ... * tn
●
éléments d'un produit :
nuplets
e1, ..., en : t1 * ... * tn
chap. 1 : expression fonctionnelle
18/01/17
44
C) Modélisation de l'information
Exemple : modélisation d'un jeu de 32 cartes
Chaque carte d'un jeu de 32 :
●
appartient à une enseigne (♠, ♣, ♥, ♦)
●
est une petite (ex : 7 de ♠, 10 de ♥)
ou un honneur (ex : roi de ♥, as de ♣)
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
45
C) Modélisation de l'information
énumération
DÉFINITIONS MATH D'ENSEMBLES
déf
déf
déf
énumération
enseigne = { ♠, ♣, ♥, ♦ }
(intervalle)
petite = { 7, 8, 9, 10 } x enseigne
honneur = { As, Roi, Dame, Valet } x enseigne
produits cartésiens
inf201 : algorithmique et programmation fonctionnelle
énumération
chap. 1 : expression fonctionnelle
18/01/17
46
C) Modélisation de l'information
déf
déf
déf
enseigne = { ♠, ♣, ♥, ♦ }
petite = { 7, 8, 9, 10 } x enseigne
honneur = { As, Roi, Dame, Valet } x enseigne
Exo :
●
Nature des éléments de petite et honneur ?
couples
●
Énumérer les éléments de petite :
{ (7,♠), ..., (10,♠), (7,♣), ..., (10, ♣),
(7,♥), ..., (10,♥), (7,♦), ..., (10,♦) }
●
Point commun entre petite et honneur ?
type de la 2ème composante : enseigne
Ex : (Roi,♥) et (9,♦)
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
47
C) Modélisation de l'information
DÉFINITIONS INFO DE TYPES
type énuméré
type enseigne = Pique|Trèfle|Coeur|Carreau
type intervalle
type petite = int (* restreint à 7, 8, 9, 10 *)
* enseigne
(* Nommage de l'énumération {As,Roi,Dame,Valet}: *)
type tête = As|Roi|Dame|Valet
type honneur = tête * enseigne
type produit
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
48
C) Modélisation de l'information
Exo 1 :
Chaque joueur détient exactement 5 cartes
tout au long du jeu.
Q1) Définir une constante QFRC
modélisant la quinte flush
royale à cœur (poker) :
Q2) QFRC ∈ ?
Q3) Implémentation ?
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
49
C) Modélisation de l'information
Q1)
DÉF DE CONSTANTE
QFRC = ( (As,♥), (Roi,♥), (Dame,♥), (Valet,♥), (10,♥) )
Q2)
QFRC ∈ honneur4 x petite
Q3)
IMPLÉMENTATION
let cst_QFRC : honneur*honneur*honneur*honneur*petite
= ( (As,Coeur), (Roi,Coeur), (Dame,Coeur),
(Valet,Coeur), (10,Coeur) )
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
50
C) Modélisation de l'information
Limitation modélisation cartes par types produit :
comment manipuler à la fois
(Dame,♥) : honneur et
(7,♣) : petite
Fonction f s'appliquant sur des petites et des honneurs :
f : petite → α
(α type quelconque), ou bien
f : honneur → α
?
⇒ f : (honneur U petite) → t
inf201 : algorithmique et programmation fonctionnelle
!?!
chap. 1 : expression fonctionnelle
18/01/17
51
C) Modélisation de l'information
 nécessité d'un nouveau type carte
réunissant petites et honneurs
 ensemble des carte :
union des ensembles petite et honneur
On parle de type somme.
somme
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
18/01/17
52
C) Modélisation de l'information
C.1)
C.2)
C.3)
C.4)
C.5)
Nommer et définir un nouveau type
Type synonyme
Type énuméré
Type produit
Type somme
inf201 : algorithmique et programmation fonctionnelle
chap. 1 : expression fonctionnelle
Téléchargement