Programmation
Fonctionnelle
Didier Verna
EPITA
Paradigme
1er ordre
Pureté
Évaluation
Typage
Résumé
Approches Fonctionnelles de la
Programmation
Introduction
Didier Verna
http://www.lrde.epita.fr/˜didier
1/34
Programmation
Fonctionnelle
Didier Verna
EPITA
Paradigme
1er ordre
Pureté
Évaluation
Typage
Résumé
Table des matières
1Un paradigme de programmation
2La fonction : un objet de 1re classe
3Programmation fonctionnelle pure / impure
4Évaluation stricte / lazy
5Les formes de typage
6Résumé
2/34
Programmation
Fonctionnelle
Didier Verna
EPITA
Paradigme
1er ordre
Pureté
Évaluation
Typage
Résumé
Un paradigme de programmation
« Quoi faire » plutôt que « Comment faire »
Un paradigme ?
Affecte l’expressivité d’un langage
Affecte la manière de penser dans un langage
Le concept de paradigme est poreux. . .
Lequel ?
Expressions
Définitions (expressions nommées)
Évaluations (de définitions ou d’expressions)
4/34
Programmation
Fonctionnelle
Didier Verna
EPITA
Paradigme
1er ordre
Pureté
Évaluation
Typage
Résumé
De l’impératif au fonctionnel
« La somme des carrés des entiers entre 1et N»
C (impératif)
i n t ssq ( i n t n )
{
i n t i = 1 , a = 0 ;
while ( i <= n )
{
a += i i ;
i += 1;
}
return a ;
}
C (récursif)
i n t ssq ( i n t n )
{
i f ( n == 1 )
return 1 ;
else
return nn + ssq ( n1);
}
Lisp
(defun ssq ( n )
( i f (= n 1)
1
(+ (n n ) ( ssq (1n ) ) ) ) )
Haskell
ssq : : I n t >I n t
ssq 1 = 1
ssq n = nn + ssq ( n1)
Clar
Concision
5/34
Programmation
Fonctionnelle
Didier Verna
EPITA
Paradigme
1er ordre
Pureté
Évaluation
Typage
Résumé
L’impératif vu à l’envers
« La racine carrée de la somme des carrés de a et de b »
C (impératif)
float hypo ( float a , float b )
{
float a2 = aa ;
float b2 = bb ;
float s = a2 + b2 ;
return s q r t ( s ) ;
}
C (moins impératif)
float hypo ( float a , float b )
{
return s q r t ( aa+bb ) ;
}
Haskell
hypo : : Float >Float >Float
hypo a b = sqrt ( ( aa ) + ( bb ) )
Lisp
(defun hypo ( a b )
(sqrt (+ (a a ) (b b ) ) ) )
Pour être tout à fait honnête...
Haskell (100% préfixe)
hypo : : Float >Float >Float
hypo a b = sqrt ( ( + ) ( ( ) a a ) ( ( ) b b ) )
6/34
1 / 26 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 !