Programmation fonctionnelle
Xavier Urbain
2011/2012
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES NEST 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 NEST 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 NEST 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 NEST 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 NEST PAS UN POLY DE RÉFÉRENCE 5
CE COURS
N’EST PAS
UN COURS DOCAML
mais on va quand-même apprendre la syntaxe
XU - ensiie - Prog. fonctionnelle 2011/2012 UN JEU DE SLIDES NEST 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 NEST 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 NEST 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 NEST 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 NEST 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 NEST 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 NEST 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 NEST 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 NEST 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 NEST 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 NEST 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 NEST 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 NEST 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 NEST 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 NEST 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 linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !