Programming Paradigms

Programming, Computer Science · course

Voir tous les documents en programmation

(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

Publicité

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-

Publicité

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:

Publicité

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>)

Publicité

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

print

print

print

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