Slide 3
Impossible d’obtenir un langage qui soit plus expressif ou plus puissant en
´
eliminant
certaines
constructions
Donc, les langages fonctionnels ont des caract´
eristiques additionnelles:
Fonctions d’
ordre sup´
erieur
: une fonction peut recevoir un argument ou retourner un argu-
ment qui est une fonction
De fac¸onplusg´
en´
erale: les fonctions sont des
citoyens de premi`
ere classe
peuvent ˆ
etre
manipul´
ees de la mˆ
eme fac¸on que les autres valeurs, transmises en argument, rec¸ues en
r´
esultat, conserv´
ees dans des structures de donn´
ees
Utilisation du
pattern-matching
:lad
´
eclaration des diff´
erentes alternatives d’une fonction
peut se faire en indiquant clairement les diff´
erents cas possibles, en fonction de la structure
des arguments
Utilisation de l’´
evaluation non-stricte et/ou paresseuse: les arguments effectifs lors d’un
appel de fonction ne sont pas n´
ecessairement ´
evalu´
es avant l’appel (
call-by-value
) comme
dans les langages traditionnels mais soit en parall`
ele (´
evaluation indulgente), soit au besoin
(´
evaluation paresseuse)
Slide 4
Inf´
erence de type: la plupart des langages
purement
fonctionnels (ce qui exclut LISP) sont
des langages
fortement typ´
es
et ce mˆ
eme s’il n’est pas n´
ecessairedesp
´
ecifier les types
le compilateur peut d´
eduire (inf´
erer) les types des expressions et v´
erifier que tout est
valide.
Polymorphisme: unefonctionest dite
polymorphe
lorsqu’elleest associ´
ee `
auntypeg´
en´
erique,
qui d´
ecrit une
classe
de types possibles
Exemple: la longueur d’une liste (ne d´
epend pas du type des ´
el´
ements)
longueur :: [t] -> Int
longueur [] = 0
longueur (x : xs) = 1 + longueur xs