Cour 1 CF

publicité
Calcul formel
Une introduction
1
Programme
Introduction à la programmation fonctionnelle avec le langage CAML
Interprétation et évaluation
Expressions et précédence des opérateurs
Définitions
Types élémentaires
Produit cartésien
Les listes
Définition des fonctions
La construction match-with et le filtrage
Structures de données
Récursivité
Exceptions et fonctions partielles
Polymorphisme et fonctions d’ordre supérieur
2
Programmation fonctionnelle(1)
concept fondamental:
L’Traiter une chose complexe en la divisant en choses plus simples et en
ignorant les détails.
objets de base :
la Un programme est un ensemble de fonctions traitant des données d’entrées.
des langages interprétés
instructions / interprété au fur et à mesure —> machine
≠ langages compilés :
instructions / préparation (compilation) / exécution
3
Programmation fonctionnelle(2)
pas de commandes, ni de séquencement de
commandes.
L’accent est mis sur le concept d’expression (termes)
et leur évaluation
Programme = groupe de fonctions
Relations entre fonctions :
une fonction peut appeler une autre fonction
le résultat d’une fonction peut être un argument
d’une autre fonction
4
Programmation fonctionnelle(3)
la programmation fonctionnelle est une famille de langage
très proches, dont le plus célèbre est LISP développé au
MIT.
le successeur de LISP: scheme: plus léger, plus simple et
aussi puissant, utilisé pour l’éducation ou le scriptage (ex:
Gimp) mais pas de typage des données ; on utilisera donc
un autre langage fonctionnel typé: Caml
5
Suite…
Les langages fonctionnel sont fortement présent dans les
laboratoires, faible pénétration dans le milieu industriel
6
Ses points forts
les programmes peuvent être écrits rapidement (surtout
pour le prototypage) et de manière concise
bien adaptés au parallélisme
ramène l’itération à la récursion
7
Concepts de base
Les langages fonctionnels modernes supportent les
concepts suivants :
Fonctions d’ordre supérieur
Evaluation tardive(Lazy evaluation)
Filtrage de motifs(Pattern matching)
Polytypes et inférence de types
8
Fonctions d’ordre supérieur
Généralement, les langages classiques, traitent les fonctions
comme des fonctions de premier-ordre, c’est-à-dire: les
paramètres de celles-ci sont traités de manière non
fonctionnelle.
9
Exemple(1)
Soit la fonction power, écrite en ML, d’abord de manière
classique puis comme une fonction d’ordre supérieur.
Fun power (n,b) =
if n = 0 then 1.0
else b * power (n-1, b)
profil : integer × real
10
real
Exemple(2)
fun powerc (n) (b) =
if n = 0
then 1.0 else b * powerc (n-
1)(b)
profil: integer- > (real -> real)
Power devient une fonction qui appliquée à un entier
retourne une fonction. Celle-ci appliquée à un réel
retourne la nième puissance de ce réel.
11
Evaluation tardive (Lazy evaluation)
Libère le programmeur des questions relatives à l’ordre
d’évaluation. Ceux-ci pour des raisons d’efficacité
préfèrent ne pas évaluer des sous-expressions si cela
n’est pas nécessaire :
12
Suite…
La lazy-evaluation offre la possibilité de construire des
structures infinies (telles que les listes)
Exemple
Fun from (n) =
13
n :: from(n+1)
Filtrage de motifs (Pattern matching)
Concept très utilisé dans les langages fonctionnels modernes
Idée : utilisation du raisonnement équationnel dans la
conception et la construction de programmes
Définir une même fonction par le biais de plusieurs
équations
Seule, une de ces équations pourra être appliquée dans un
contexte donné
14
Poly types et inférence de types(1)
On appelle poly type, un type qui contient une ou
plusieurs variables de types
15
Poly types et inférence de types(2)
dans un langage à typage statique, le type de chaque variable,
paramètre , … est explicitement donné à la déclaration de ces
derniers
le compilateur n ’a pas à déterminer leur type suivant le
contexte
Mais quand le système doit déterminer lui-même le type d ’une
entité, en fonction du contexte, on dit qu ’il fait de l ’inférence
de types
16
Suite…
Une situation d ’inférence de type simple dans les langages à
typage statique est la suivante :
Const I = expression
Le compilateur aura à inférer le type de I d ’après le type
de l ’expression .
17
Exemples
Exemple1
fun even (n) = n mod 2 = 0
Si on sait que l ’opérateur mod a pour type
integer x integer -> integer
On peut inférer le type que du paramètre n est integer
et celui de la fonction even integer -> boolean
Le type inféré peut être un polytype
18
Suite…
Exemple2
fun Id(x) = x
Si on suppose que le type de x est T, alors le type de ID
est T-> T
19
Téléchargement