(cid:1) Le paradigme fonctionnel
(cid:1) Le paradigme proc dural
(cid:1) Le paradigme objets
Le paradigme objets
3
paradigme fonctionnel
(cid:1) Le paradigme fonctionnel
paradigme fonctionnel
paradigme fonctionnel
" Le terme de programmation fonctionnelle d signe
une famille de langages de programmation ayant
un certain nombre de traits en commun, dont un
r le central donn aux fonctions, d'o le nom.
" On peut y raisonner comme en maths, faire des
" On peut y raisonner comme en maths, faire des
d monstrations par r currence, des analyses
r cursives de complexit , et acqu rir une rigueur
certaine.
fonctions r cursives sont au cSur de ce
" Les fonctions r cursives
fonctions r cursives
fonctions r cursives
paradigme.
Exemple: Haskell, Standard ML et Ocaml, &
Exemple
Exemple
Exemple
4
imp ratif) est le plus
paradigme proc dural (ou imp ratif
(cid:1) Le paradigme proc dural
imp ratif
imp ratif
paradigme proc dural
paradigme proc dural
ancien.
" Il met laccent sur l'appel de proc dure pour
effectuer un calcul s quentiel.
" L'it ration est le m canisme central pour effectuer
un calcul r p titif, la r cursivit y est rarement
un calcul r p titif, la r cursivit y est rarement
optimis e.
optimis e.
" La programmation imp rative consid re qu'un
texte de programme est une suite d'instructions
pilotant un ordinateur.
Exemple : Apparu avec Fortran (1967), poursuivi
Exemple
Exemple
Exemple
avec Pascal (1970-1990), actuellement C est le
repr sentant largement majoritaire.
5
paradigme objets
(cid:1) Le paradigme objets
paradigme objets
paradigme objets
" s'appuie sur la notion de classe
objet .
classe et d'objet
objet
objet
classe
classe
" Les objets ont du savoir-faire sous la forme
de m thodes
m thodes qui ne sont autres que des
m thodes
m thodes
proc dures mais destin es tre transmises un
message.
objet receveur sous la forme d'un message
objet receveur sous la forme d'un message
message.
message
message
message
message
" Le calcul est donc d centralis dans les objets,
Le calcul est donc d centralis dans les objets,
dont les m thodes peuvent
tre fonctionnelles ou imp rative.
r utilisation du logiciel et son
" Notion de r utilisation
r utilisation
r utilisation
extensibilit .
Exemple: Smalltalk (1970), popularis avec Java et
Exemple
Exemple
Exemple
C++ dans les ann es 1990.
6
Introduction
Introduction
Introduction
Introduction
Con u en 1958 par J. McCarthy, LISP est un des plus
vieux langages de programmation.
Il fut pendant longtemps confi la recherche en
intelligence artificielle.
LISP se distingue des langages traditionnels par le fait
quil est sp cialement adapt la manipulation de
quil est sp cialement adapt la manipulation de
symboles.
Avantages
Avantages ::::
Avantages
Avantages
(cid:1) La simplicit de la syntaxe : elle repose sur la seule
structure de liste.
(cid:1) La puissance du langage en particulier l quivalence
compl te entre donn es et programmes.
(cid:1) Linteractivit : LISP est principalement interpr t .
8
: Atome
de base : Atome
Objet de base
Objet
: Atome
: Atome
de base
de base
Objet
Objet
latome.
Lobjet de base de LISP est latome.
latome.
latome.
Un atome est :
(cid:1) un nombre,
Exemple:126, -54
Exemple
Exemple
Exemple:126, -54
Exemple
Exemple
Exemple
Exemple
(cid:1) un symbole : toute s quence non vide de
caract res,
Exemple:Le-Lisp, var, 1+x/y.
Exemple
Exemple
Advertisement
Exemple
Les symboles permettent de d signer les
diff rents objets (donn es et fonctions).
9
liste
: la liste
Structure de base de LISP : la
Structure de base de LISP
liste
liste
: la
: la
Structure de base de LISP
Structure de base de LISP
Une liste est une s quence ordonn e,
ventuellement vide, datomes ou de listes,
d limit e entre parenth ses.
d limit e entre parenth ses.
Exemple:(* 3 7)
Exemple
Exemple
Exemple
(+ (* 3 7) (- 8 4) 10)
(Langages de lIA)
( )
La liste vide joue un r le tr s important en LISP.
10
Expression l mentaire
Expression l mentaire
Expression l mentaire
Expression l mentaire
expression
Lexpression l mentaire de LISP est la SSSS----expression
expression
expression
Une S-expression est :
(cid:1) soit un atome,
(cid:1) soit une liste.
(cid:1) soit une liste.
Toute S-expression a une valeur en LISP. Il est
important de bien diff rencier une S-
expression de sa valeur. On note la valeur
dune S-expression <s> : VALEUR<s>.
Le r le de linterpr te LISP est d valuer une S-
expression pour d terminer sa valeur.
11
Fonctionnement de base de l valuateur de S----
Fonctionnement de base de l valuateur de S
Fonctionnement de base de l valuateur de S
Fonctionnement de base de l valuateur de S
expression
expression
expression
expression
La valeur dune S-expression est d termin e
diff remment, selon quil sagit dun atome ou dune
liste :
(cid:1) un atome : nombre ou symbole
(cid:1) un atome : nombre ou symbole
la valeur dun nombre est lui-m me,
la valeur dun symbole :
(cid:1) soit pr d finie dans LISP et non modifiable : le
symbole est alors une des deux constantes de LISP
t ou nil , t a pour valeur lui-m me , nil a pour
valeur ( ).
(cid:1) soit d finie et modifi e dynamiquement, variable.
12
(cid:1) une liste (<s0>& <sn>) est valu e comme suit :
- LISP consid re que <s0> est un symbole qui
d signe un nom de fonction ; <s0> nest pas
valu . <s0> ne doit tre ni une liste ni un
symbole qui ne correspond pas un de fonction
connu par LISP.
- LISP value la sous-expression <s1> et
- LISP value la sous-expression <s > et
d termine VALEUR<s1>, & <sn> et d termine
VALEUR<sn>
- LISP applique la fonction associ e <s0> aux
arguments VALEUR<s1>&VALEUR<sn> ; la sous-
expression aura pour valeur le r sultat de cette
application.
13
Dans une S-expression toute parenth se ouvrante doit
tre suivie dun nom de fonction.
Exemple:
Exemple
Exemple
Exemple
? (1 2 3 4)
** eval : fonction ind finie : 1
Comment d signer une S-expression (atome ou liste)
quon ne veut pas valuer ?
(cid:2) gr ce la fonction quote
?(quote (1 2 3 4))
= (1 2 3 4)
Abbr viation : (1 2 3 4)
14
D finition de fonctions
D finition de fonctions
D finition de fonctions
D finition de fonctions
Un programme en Lisp est une fonction ou un
ensemble de fonctions. L'utilisateur d finit les
fonctions gr ce la primitive "de".
Exemple:
Exemple:
Exemple:
Exemple:
? (de *(z) ( z z))
= **
La valeur de cette S-expression est le nom de
la fonction qui vient d' tre d finie.
15
R cursion::::
R cursion
R cursion
R cursion
Syntaxiquement, une fonction LISP est
r cursive si le nom de cette fonction figure
dans sa propre d fintion.
Exemple 1:Factorielle
Exemple 1:
Exemple 1:
Exemple 1:
(de fact(n)
(if (= n 1)
1
(* n (fact (- n 1)))))
16
R cursion::::
R cursion
R cursion
R cursion
Exemple 2:Suite de Fibonacci Un= Un-1 + Un-
Exemple 2:
Exemple 2:
Exemple 2:
(de fib(n)
(cond ((= n 0) 0)
(cond ((= n 0) 0)
((= n 1) 1)
(t (+ (fib (-n 1)) (fib (- n 2)))))
17
Le r le de l'interpr te LISP est d' valuer une S-
Advertisement
expression pour d terminer sa valeur.
Il proc de selon l'it ration suivante:
Lire une S-expression
Evaluer la S-expression
Imprimer la valeur trouv e
Une session LISP consiste faire valuer
successivement diff rentes expressions qui ob issent
une syntaxe tr s simple.
18
(cid:1) LISP ne fait pas une distinction lexicale entre
les symboles de fonctions et les symboles de
variables.
(cid:1) Sinon, ceci va nous emp cher de construire
par exemple une fonction r cursive en la
par exemple une fonction r cursive en la
d finissant avec son it r e.
19
(cid:1) LISP ne fait pas une distinction lexicale entre
les symboles de fonctions et les symboles de
variables.
(cid:1) Sinon, ceci va nous emp cher de construire
par exemple une fonction r cursive en la
par exemple une fonction r cursive en la
d finissant avec son it r e.
(cid:1) Il existe deux classes de syst mes LISP
suivant la fa on dont ce probl me est r solu:
a. Syst mes bi-valents
b. Syst mes mono-valents
20
valents: : : :
a. Syst mes bibibibi----valents
a. Syst mes
valents
valents
a. Syst mes
a. Syst mes
Chaque symbole peut recevoir deux valeurs, une
valeur comme variable dite C-val et une valeur
comme fonction dite F-val.
Exemple:
(setq a 3)
(setq a 3)
Nous mettons 3 dans la c-val de a
Les symboles +,-,*,... ont une F-val dans
l'environnement initial.
Le symbole fib a une F-val partir de la d finition
de la fonction fib.
21
valents: : : :
a. Syst mes bibibibi----valents
a. Syst mes
valents
valents
a. Syst mes
a. Syst mes
Remarque: Pour avoir la d finition d'une
fonction on utilise la fonction pr d finie
getdef
Exemple: ?(getdef 'fib)
Exemple: ?(getdef 'fib)
Dans les syst mes bi-valents rien n'emp che
de donner une valeur la fois la C-val et la
F-val d'un symbole.
Nous trouvons comme exemple de syst me
bivalents le-Lisp et Mac-Lisp.
22
valents: : : :
b. Syst mes monomonomonomono----valents
b. Syst mes
valents
valents
b. Syst mes
b. Syst mes
Dans ces syst mes un symbole ne peut
recevoir qu'une seule valeur dite C-val.
L' valuation de la fonction donne sa d finition
L' valuation de la fonction donne sa d finition
(on n'a pas besoin de getdef).
23
Nous avons vu que la valeur d'une liste est
obtenue en op rant le premier l ment, qui
correspond au nom de la fonction, sur les
valeurs des autres l ments.
Mais prenons cet exemple: ?(setq a 5)
Mais prenons cet exemple: ?(setq a 5)
La r gle g n rale n'a pas t appliqu e : a n'a
pas t valu e puisqu'il s'agit de lui donner
une valeur.
24
On distingue d'abord les primitives pr d finies et les
fonctions d finies par l'utilisateur:
(cid:1) SUBR: on appelle SUBR une fonction pr d finie
crite en langage machine valuant ses arguments.
(cid:1) EXPR ou LAMBDA: une fonction crite en LISP
valuant ses argument.
valuant ses argument.
(cid:1) FSUBR: une fonction pr d finie crite en langage
machine n' valuant pas tous ses arguments.
Exemple:setq
Exemple:
Exemple:
Exemple:
25
On peut obtenir le type d'une fonction gr ce
la primitive typefn.
Exemple:
Exemple:
Exemple:
Exemple:
?(typefn 'fact)
?(typefn 'fact)
= expr
?(typefn 'car)
= subr1
?(typefn '*)
= nsubr
26
Constructeur
et s lecteur de listes:
Constructeur et s lecteur de listes:
et s lecteur de listes:
et s lecteur de listes:
Constructeur
Constructeur
cons: permet d'ajouter un atome ou liste en t te
- cons
cons
cons
d'une liste.
Exemple:
Exemple:
Exemple:
Exemple:
?(cons 2 '(3 4))
= (2 3 4)
?(cons '(1 2) '(3 4))
?(cons '(1 2) '(3 4))
= ((1 2) 3 4)
- carcarcarcar: s lectionne et retourne le premier l ment d'une
liste.
(car <l>) retourne la t te de la liste VALEUR<l>,
retourne erreur si VALEUR<l> n'est pas une liste.
27
et s lecteur de listes:
Advertisement
Constructeur et s lecteur de listes:
Constructeur
et s lecteur de listes:
et s lecteur de listes:
Constructeur
Constructeur
- cdr: retourne une liste sans son premier l ment
(cdr <l>) retourne le reste de la liste VALEUR<l>,
retourne erreur si VALEUR<l> n'est pas une liste.
Exemple:
Exemple:
Exemple:
Exemple:
?(car '(1 2 3))
=1
?(car (cdr (cons 1 '(2 3))))
= 2
28
et s lecteur de listes:
Constructeur et s lecteur de listes:
Constructeur
et s lecteur de listes:
et s lecteur de listes:
Constructeur
Constructeur
(cid:1) CADR
Permet d'extraire le second l ment dela liste
fournie en argument.
Exemple: (cadr (a b c)) = (car (cdr (a b c)))
= (car (b c)) = b
29
et s lecteur de listes:
Constructeur et s lecteur de listes:
Constructeur
et s lecteur de listes:
et s lecteur de listes:
Constructeur
Constructeur
(cid:1) CADDR
Permet d'extraire le troisi me l ment dela
liste fournie en argument.
Exemple: (car (cdr (cdr (a b c)))) = (car (cdr (b
c))) = (car (c)) = c
30
et s lecteur de listes:
Constructeur et s lecteur de listes:
Constructeur
et s lecteur de listes:
et s lecteur de listes:
Constructeur
Constructeur
(cid:2)b
?(cadr2(abcd))
(cid:2)c
?(caddr 2(a b c d))
(cid:2)(c)
?(cdadr 2(a (b c) d))
(cid:2)(c d)
(cid:2)(c d)
?(cddr 2(a b c d))
?(cddr 2(a b c d))
?(cddar 2((a b c d) (e) f)) (cid:2)(c d)
?(cadar 2((a b c) d e)) (cid:2)b
31
et s lecteur de listes:
Constructeur et s lecteur de listes:
Constructeur
et s lecteur de listes:
et s lecteur de listes:
Constructeur
Constructeur
- (append <l1> ... <ln>)
retourne la liste obtenue en concatenant les listes <l1>
... <ln>
Exemple:
Exemple:
Exemple:
Exemple:
?(append '(ceci est ) '(un support de cours) '(en Lisp))
?(append '(ceci est ) '(un support de cours) '(en Lisp))
= (ceci est un support de cours en Lisp)
- (list <s1> ...<sn>)
retourne la liste dont les l ments <s1> ...<sn>.
Exemple:
Exemple:
Exemple:
Exemple:
?(list 1 2 '(3 4))
= (1 2 (3 4))
32
et s lecteur de listes:
Constructeur et s lecteur de listes:
Constructeur
et s lecteur de listes:
et s lecteur de listes:
Constructeur
Constructeur
- (length <s>)
retourne le nombre d' l ments de plus haut
niveau de <s>, si <s> est une liste, sinon
0 (si <s> est un atome.
0 (si <s> est un atome.
Exemple:
?(lenght '(a (b c) d))
=3
33
Pr dicats
Pr dicats
Pr dicats
Pr dicats
Les fonctions pr dicats sont toujours
valuantes
et retrournent nil si le pr dicat est faux.
Si le pr dicat est vrai, la r ponse peut
Si le pr dicat est vrai, la r ponse peut
d pendre des syst mes puisque "vrai"
admet comme repr sentation toute S-
expression diff rente de nil. De nombreux
syst me utilise l'atome "t".
34
Pr dicats
Pr dicats
Pr dicats
Pr dicats
- (atom <s>)
retourne "t" si VALEUR<s> est un atome num rique ou
symbolique, et retourne () si c'est une liste non vide.
- (null <s>)
retourne "t" si VALEUR<s> est gal () et () dans le cas
retourne "t" si VALEUR<s> est gal () et () dans le cas
contraire.
- (eq <s1> <s2>)
permet de tester l'identit de deux atomes: Si
VALEUR<s1> et VALEUR<s2> sont identiques
retourne "t", sinon retourne ().
- (symbolp <s>)
retourne "t" si <s> est un symbole, et retourne nil
sinon.
35
Pr dicats
Pr dicats
Pr dicats
Pr dicats
- (constantp <s>)
Advertisement
retourne "t" si <s> est une constante, et
retourne nil sinon. Une constante est soit un
nombre, une cha ne de caract res ou nil.
nombre, une cha ne de caract res ou nil.
- (consp <s>)
retourne "t" si <s> est une liste non vide, et
retourne nil sinon.
- (listp <s>)
retourne "t" si <s> est une liste, et retourne nil
sinon.
36
Fonctions logiques
Fonctions logiques
Fonctions logiques
Fonctions logiques
Ce sont les fonctions pour lesquelles la valeur
logique du r sultat ne d pend que de la
valeur logique des arguments. Par exemple
"OR" retourne une expression de valeur
"OR" retourne une expression de valeur
logique vraie si l'un au moins des arguments
est de valeur logique vraie sinon retourne nil.
De plus pour viter des valuations inutiles,
l' valuation s'arr te d s le premier argument
dont la valeur est vraie. Pour cette raison OR
est une F-SUBR.
37
logiques
Fonctions logiques
Fonctions
logiques
logiques
Fonctions
Fonctions
- (or <s1> ..<sN>)
retourne la valeur du premier argument dont la
valeur est diff rent de nil, et nil sinon.
L' valuation est arr t d s l'obtention de nil.
L' valuation est arr t d s l'obtention de nil.
- (and <s1> ..<sN>)
retourne la valeur du dernier argument si les
valuations de tous les arguments sont de
valeur vraie, et nil s'il n'existe pas.
38
S quenceurs
S quenceurs
S quenceurs
S quenceurs
(progn <s1> ... <sN>)
value s quentiellement ses arguments et
retourne la valeur du dernier.
39
(IF <s1> <s2> <s3>)
Si la valeur de <s1> est diff rente de NIL, IF retourne la
valeur de <s2>; sinon, IF value <s3>.
IF permet de construire une structure de contr le de type
"si alors sinon" .
"si alors sinon" .
Exemples :
?(IF T 1 2)
=1
?(IF NIL 1 2)
=2
?(IF NIL 1)
=NIL
40
(WHEN <test> <s1> ... <sN>)
Si <test> est Vrai, WHEN value chacune des
expressions <sI>.
(UNLESS <test> <s1> ... <sN>)
Si <test> est Faux, UNLESS value chacune des
expressions <sI>.
41
(COND <l1> <l2> ... <lN>)
COND est la fonction conditionnelle la plus compl te de LISP.
Chaque <li> est une liste appel e clause, ayant la structure
suivante:
(<ss> <s1> <s2> ... <sN>) o <ss> est une expression
quelconque et <s1> ... <sN> le corps de la clause. COND
s lectionne la premi re <li> dont la valeur de <ss> est
diff rente de NIL. Si le nombre des <si> de la clause est nul,
COND retourne la valeur de <ss>, sinon les <s1> ... <sN> de la
clause sont valu s et la valeur de <sN> est retourn e. Si aucune
clause n'est s lectionn e, COND retourne NIL.
42
Exemple :
?(de test (x y)
(COND
((> x y)
((= x y)
((= x y)
'inf))
(t
'sup)
'egal)
'egal)
)
= test
?(test 12 5)
= sup
?(test 5 8)
=inf
43
- (print <expr>)
value son argument, dite la valeur obtenue et
retourne sa valeur.
Exemple:
Exemple:
?(setq a 3)
= 3
?(print a)
a
= 3
44
print est souvent utilis e avec des cha nes de
caract res (entre guillemets).
?(print 'salut) ; on cr e le symbole salut
salut
= salut
= salut
?(setq salut "Bonjour")
= Bonjour
?(print salut)
Bonjour
= Bonjour
45
L'utilisation de print ne se justifie que lorsque
le r sultat de l' valuation n'est pas dit .
- (readreadreadread)
c'est une fonction 0-aire qui retourne sans
l valuer la r ponse de l'utilisateur (un ? est
l valuer la r ponse de l'utilisateur (un ? est
envoy par le syst me pour l'inviter envoyer
envoy par le syst me pour l'inviter envoyer
une expression).
Exemple:
? (setq x (read))
? 5; r ponse de l'utilisateur
= 5
46