Programmation Fonctionnelle
Une introduction
Erick Gallesio eg(@)unice.fr
SI4 – 2010-2011
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 1 / 22
Introduction au cours "Programmation Fonctionnelle" (1)
Pourquoi un cours de programmation fonctionnelle?
Pourquoi Scheme?
Lisp
Scheme est un dialecte Lisp
petit langage
très utilisé dans l’enseignement
nombreux supports de cours (livres, Web)
nombreuses implémentations (Unix, Windows)
norme de fait (R6RS) + SRFI
R7RS en cours de finalisation
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 2 / 22
Introduction au cours "Programmation Fonctionnelle" (2)
Scheme est un vieux langage, mais il est très utilisé
regain d’intérêt depuis quelques années
petit donc facilement "embarquable"
Langage de "glue"
Guile pour les projets de la FSF
Applications utilisant un Scheme/Lisp embarqué
Emacs
AutoCAD
GIMP
Gnumeric
...
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 3 / 22
Introduction au cours "Programmation Fonctionnelle" (3)
Dicton poluplaire:
Those who do not understand Unix are condemned to reinvent it, poorly.
– Henry Spencer
La même chose est vraie pour Lisp (moi :-)
Java 1.0 (1997): Syntaxe C++ mais un GC + ...
Java 1.1 (1998): inner classes + ...
Java 1.2 (1998): Reflection, Collections + ...
Java 1.3 (2000): Java Platform Debugger Architecture + ...
Java 1.4 (2002): integrated XML parser and XSLT processor + ...
Java 5.0 (2004): for-each loop, generics, autoboxing and var-args + ...
Java 6.0 (2006): facilite l’utilisation de langages de scripts (javascript) + ...
Java 7.0 (2011?): amélioration diverses (plus les lambda)
Java 8.0 (????): lambda expressions (informally, "closures")
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 4 / 22
Systèmes Scheme
En général, consulter le site http://www.schemers.org
Implémentations
Dr Scheme
Guile
MIT Scheme
SCM
Implémentations niçoises:
Bigloo
STk
STklos
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 5 / 22
Documents, Cours
De nombreux documents sont disponibles sur le Web pour apprendre Scheme:
Scheme in Fixnum Days de Dorai Sitaram
http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html
The Scheme Programming Language de Kent Dybvig
http://www.scheme.com/tspl2d/index.html
How to Design Programs (PLT) http://www.htdp.org
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 6 / 22
Introduction
Lambda Calcul (Alonzo Church 1940)
C’est quoi?
LISP (John Mc Carthy 1960)
LISP 1.5 1960
MacLisp
Machines Lisp (Zeta Lisp)
Common Lisp
Scheme (Sussman & Steele 1975)
RnRS
SRFI
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 7 / 22
Rudiments de Scheme
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 8 / 22
Syntaxe
La syntaxe est simple
notation parenthésée
écriture préfixe
2+3 (+ 2 3)
2+3+x+y (+23xy)
2+3*x (+ 2 (* 3 x))
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 9 / 22
Types de base: nombres (1)
Entiers
10
1000
#xff 255
#o17 15
On peut aussi avoir des "bignums" (précision “infinie”)
Rééls
1.23
3.2e58
Les rééls sont "inexacts"
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 10 / 22
Types de base: nombres (2)
Rationnels
Les rationnels sont "exacts"
10/3
(/ 10 3) 10/3
(exact->inexact 10/3) 3.333333333333
(inexact->exact (/ 10 3.0) 7505999378950827/2251799813685248
Complexes
2+3i
(make-rectangular 3 2)
(make-polar 2 12)
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 11 / 22
Types de base: Booléens et Chaînes de caractères
Booléens
Deux valeurs possibles:
#t (pour vrai)
#f (pour faux)
En Scheme, seule la valeur #f est fausse; toute autre valeur est
considérée comme vraie.
Chaînes de caractères
Taille quelconque
"Une chaine"
"Regles classiques:\"guillemets\" et \n"
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 12 / 22
Types de base: Symboles (1)
En gros, tout ce qui ne peut pas être pris pour autre chose (en fait c’est un peu
plus compliqué). On ne fait pas la différence entre minuscules et majuscules
Exemples
toto
ToTo
+
*
exemple-1
un-symbole-tres-tres-long
exact->inexact
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 13 / 22
Types de base: Symboles (2)
Expressions symboliques
Données manipulées par l’interprète: expressions symboliques (sexpr)
Mécanisme d’évaluation:
(- (+ 2 (* 3 5)) 7)
(- (+ 2 15) 7)
(- 17 7)
10
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 14 / 22
Définition de variables (1)
La forme define permet de définir une association nom-valeur.
>(define x10)
x
>(define y(+x1))
y
> x
10
> y
11
>(+x y)
21
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 15 / 22
Définition de variables (2)
Que se passe t’il pour les symboles pré-definis
> +
#<subr +> ;la fct primitive pour additionner
>*
#<subr *>;la fct primitive pour multiplier
Super!!!
Essayons maintenant d’utiliser ces symboles
>(define add +)
; add est maintenant définie. Utilisons la.
>(add 1 2)
3
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 16 / 22
Fonctions (1)
Les fonctions sont donc des objets comme les autres en Scheme.
On dit qu’elles sont de première classe.
On peut définir des fonctions utilisateur avec la forme spéciale lambda
>(lambda(x) (*x2))
#<closure>
;on peut aussi utiliser la notation suivante
>(λ(x) (*x2))
#<closure>
Mais on ne peut pas faire grand chose avec cette fonction on utilise
donc define
>(define double (λ(x) (*x2)))
; double est maintenant définie
>(double 12)
24
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 17 / 22
Fonctions (2)
On peut avoir des définitions à l’intérieur d’une fonction
(define hypotenuse
(λ(ab)
;hypotenuse est une fonction à 2 paramètres
(define carre (λ(x) (*x x)))
;Résultat: a2+b2
(sqrt (+(carre a)
(carre b)))))
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 18 / 22
Structures de contrôle: if (1)
Forme spéciale if
(if <test>
<action1>)
ou bien
(if <test>
<action1>
<action2>)
Exemple:
>(define a1)
>(define b2)
>(if (<a b)a b)
1
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 19 / 22
Structures de contrôle: if (2)
Exemple 1:
>(if (+1 2)"vrai" "faux")
"vrai"
Exemple 2:
(define signe
(λ(n)
(if (<n0)
-1
(if (>n0)
1
0))))
Erick Gallesio eg(@)unice.fr () Programmation Fonctionnelle SI4 – 2010-2011 20 / 22
1 / 39 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 !