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