Programmation fonctionnelle
Xavier Urbain
2011/2012
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 1
Programmation. . .
Troll : impératif ! fonctionnel !
Futé : Problème �bonne structure �langage adapté
Débroussaillage (1 ou 2 cours)
Chaque partie :
•Structure de donnée
•Outils (itérateurs, constructions, etc.)
Machines : manipulation, mise en œuvre
Travaux dirigés : aspects théoriques, intérêt
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 2
Programmation fonctionnelle
Aspects principaux ici :
•Tout est valeur (expressions, fonctions de première classe)
•Persistance (JAMAIS de modification)
�Simplification du code et donc correction
�Efficacité (undo gratuit)
Programmation similaire à raisonnement mathématique (modulo scories)
�Abstraction, programmation de haut niveau (pourquoi �=comment)
Bonus modèle formel : λ-calcul x(M1M2)λx.M −→
β
capture tout programme
�Preuve de correction aisée et naturelle induction/récurrence
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 3
Programmation fonctionnelle Troll bashing
Efficace ?
Utilisé ?
Pénible ?
100% pur jus ?
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 4
Programmation fonctionnelle langages
Haskell, Scheme, Lisp, ML, Erlang, Gallina. . .
OCAML développé à l’INRIA http://caml.inria.fr
•Fonctionnel + traits impératifs ici : noyau fonctionnel et exceptions
•Fortement typé les types sont nos amis !
•Évaluation stricte arguments toujours évalués en premier
•Compilé �vers natif, efficace
•Interprété �vers bytecode, générique
•Boucle d’interaction �pratique
Persistance =⇒gestion mémoire efficace, très complexe, cachée
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 5
CE COURS
N’EST PAS
UN COURS D’OCAML
mais on va quand-même apprendre la syntaxe
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 6
Biblio
•Développement d’applications avec OCaml
•Chailloux, Manoury, Pagano
•O’Reilly
•http://www.pps.jussieu.fr/Livres/
ora/DA-OCAML/
•Purely Functional Data Structures
•Okasaki
•Cambridge University Press
SML !
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 7
Biblio
•Approche fonctionnelle de la programmation
•Cousineau, Mauny
•Édiscience/Dunod
Camllight !
•Le langage Caml
•Leroy, Weis
•Dunod
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 8
Noyau fonctionnel exploration
Programme = suite finie
•Expressions →valeurs
•Déclarations →noms
Séparateur (expr) ;;
Valeurs basiques. . .
Comparaisons, opérations logiques. . .
Arithmétique. . .
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 9
Mémoire. . . intuition
En gros :
· · ·
1101010100010111100101010110111110011010100001110
0010101011011111100010101000101111100011010100101
1000010101000101010101101000010111100010101000101
0000000000000000000000010110111101000101010000111
· · ·
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 10
Mémoire. . . intuition
En gros :
· · ·
1101010100010111100101010110111110011010100001110
0010101011011111100010101000101111100011010100101
1000010101000101010101101000010111100010101000101
0000000000000000000000010110111101000101010000111
· · ·
0010101011011111001101010000 ?
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 11
Mémoire. . . intuition
En gros :
· · ·
1101010100010111100101010110111110011010100001110
0010101011011111100010101000101111100011010100101
1000010101000101010101101000010111100010101000101
0000000000000000000000010110111101000101010000111
· · ·
0010101011011111001101010000 ?
Segmentation ?
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 12
Noyau fonctionnel exploration
Programme = suite finie
•Expressions →valeurs
•Déclarations →noms
Séparateur (expr) ;;
Valeurs basiques. . . typées
Comparaisons, opérations logiques. . . sur même type
Arithmétique. . . sur même type, sans implicite
Fortement typé :jamais de problèmes de confusion (ni segfault)
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 13
Noyau fonctionnel expressions
Branchement
if cthen value1 else value2
Type de cbool et même type pour value1 et value2
Égal à value1 si cvaut true
Égal à value2 si cvaut false
if (2.718 > 3.141) then 666 else 42 ;; (*vaut 42 *)
Remarque : branchement �=fonction logique
if condition then true else false ;;
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 14
Noyau fonctionnel expressions
Branchement
if cthen value1 else value2
Type de cbool et même type pour value1 et value2
Égal à value1 si cvaut true
Égal à value2 si cvaut false
if (2.718 > 3.141) then 666 else 42 ;; (*vaut 42 *)
Remarque : branchement �=fonction logique
condition ;;
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 15
Noyau fonctionnel expressions
Encore des expressions !
(0x2ff_df_aa = 50_323_370) or (3 < 666) ;;
3+(if 42 <= 666 then 1else -272) ;;
•Manipulation d’expressions (tout au même niveau)
•Bon typage nécessaire :
–Mêmes types des deux côtés dans branchement
–Mêmes types pour comparaisons, etc.
•Pas de conversion implicite
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 16
Noyau fonctionnel déclarations
Donner un nom à une expression globalement ou localement
let x=expr (*x : nom de la valeur d’expr *)
let toto = 40 + 2 {(toto,42),. . . }
Jamais modifié car persistance
Identificateur : expression
let titi=toto {(titi,42),(toto,42),. . . }
let toto = 666 {(toto,666),(titi,42),(toto,42),. . . }
titi ?�42
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 17
Noyau fonctionnel expressions avec déclarations
Donner un nom à une expression globalement ou localement
let x=e1 in e2
{(toto,42),. . . }
let titi = 111 *6in {(titi,666),(toto,42),. . . }
titi *666 *titi {(titi,666),(toto,42),. . . }
{(toto,42),. . . }
Identificateur viable dans expression interne portée
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 18
Noyau fonctionnel expressions avec déclarations
Donner un nom à une expression globalement ou localement
let x=e1 in e2
{(toto,42),. . . }
let titi = 111 *6in {(titi,666),(toto,42),. . . }
titi *666 *toto {(titi,666),(toto,42),. . . }
{(toto,42),. . . }
Identificateur viable dans expression interne portée
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 19
Noyau fonctionnel expressions avec déclarations
Donner un nom à une expression globalement ou localement
let x=e1 in e2
{(toto,42),. . . }
let toto = 111 *6in {(toto,666),(toto,42),. . . }
toto *666 *toto {(toto,666),(toto,42),. . . }
{(toto,42),. . . }
ici : capture
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES N’EST PAS UN POLY DE RÉFÉRENCE 20
1 / 15 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!