Vous êtes sur la page 1sur 4

Initiation la programmation fonctionnelle

Philipe Ezequel
ezequel@univ-st-st-etienne.fr
webperso.univ-st-etienne.fr/~ezequel/index.html
Quest-ce que la programmation fonctionnelle ?
Al kowarizmie
Pdf : portable description format
Langage machine (58) >> langage dassemblage (pop eax) >> langage volus (compilateur,
interprteur)
Ada lovelace
Herman Hollerith fondateur de IBM (international bizness machine)
Cours 2
Commande less et od
~ /langages/c/peano
Une preuve par cardinalit nous montre quil existe des fonctions non calculables
Paradigmes de programmation
Familles de langages de programmation
Il existe trois langages qui sont :
Paradigmes impratifs : un programme constitu dun ensemble ou une suite
dinstructions (JAVA, PYTHON, FLASH, C++, C#, HTML, PHP, VBASIC, ADA,
PERL, PASCAL, FORTH, BRAINF**K
Paradigmes fonctionnel : le programme est une expression valuer (M de PEANO,
LISP, CAML, )
Paradigme logique : cest une suite de propositions logiques et une excution est une
preuves dassertion ;
Sance 3
La machine de Peano
- Evaluateur dexpression arithmtiques
- Possibilit de dfinir des fonctions
Addition algorithme
X+0=X
X+Y=(X+(Y-1)) +1
Fonction rcursive
Exemple

Utilisation dun accumulateur


Cest un paramtre qui sert stocker des rsultats intermdiaires
Ex : addition
8+4
X=8
Y=4
Accumulateur 8 9 10 11 12
Compteur 0 1 2 3 4
Plus accu (X, Y) = trucmuche (Y, X ,0)
Trucmuche (Y, Accu, Compteur) = si compteur= Y alors accu
Sinon trucmuche (Y, ++accu, ++compteur)
Ex : soustraction
X-1 avec accumulateur
Decr (X)= X-1
X=5
decr (5) =4
Accu1 : 0 1 2 3 4
Accu2 : 1 2 3 4 5
Decr (X)= bidule(X,0,1)
Bidule (X, Accu1, Accu2) = si Accu2 = X alors Accu1
Sinon bidule (X, ++Accu1, ++Accu2)
Exercice/ crire : moins (X, Y) avec bidule ou trucmuche
Rsolution
Ce quil faut ajouter a Y pour obtenir X
Moins (X, Y) = bidule (X,0, Y)
Bidule ne sais que comparer deux nombre sont gaux
Bidule (X, Y, Z) = X+Y-Z
Exercice
Reste (X, Y) =
Si X<Y : X
Sinon : cest pareil que le reste de la division X-Y par Y
Machine de peano
Reste (X, Y) = si X<Y alors X
Sinon reste (X-Y, Y)
Quotient (X, Y)
Si X<Y=0
Sinon cest le quotient de X-Y par Y, +1
Machine de piano
Quotient (X, Y) = si X<Y alors 0
Sinon quotient ++(X-Y), Y)
Quotient_accu(X, Y) = qacc (X,0, Y)
Qacc (X, Q, Y) = si X<Y alors Q

Sinon qacc (X-Y, ++Q, Y)


Infega (X, Y) = si X=alors 1
Sinon Y= 0 alors 0
Sinon infegal (--X, --Y)
Inf (X, Y) = 1- infegal(Y,X)
Min (X, Y) = si infegal (X, Y) alors X sinon Y
Infegal2(X, Y) = inf_accu (X, Y, 0)
Inf_accu (X, Y, Accu) = si
Seance du 16/02/2016
Somme(N)= si N= alors 0
Sinon N + Somme (-- N)
Somme2(N) = somme_acc= (N, 0, 0)
Somme-acc(N,I,S) = si I = N alors S
Sinon Somme_acc(N,++I, S+I+1)
On ne peut crire que par Fonction restrictive ou avec accumulateur
Les listes cest un crochet ouvrant sparer dun crochet fermant qui contiennent des nombres
entiers naturels
Dfinition : -la liste vide est une liste qui na aucun lment
Si X est un entier, si l est une liste, cons(X,L)
LES FONCTIONS
- Car(L) = le premier lment de L, car ; 5,9,3 = 5
- Cdr(L)= la liste L, prive de son premier lment;
car (cons(X,L))= X langage LISP
cdr (cons(X,L))= L
cons (car(L), cdr (L))= L
CAR= content of Address Register
CDR= content Decrement Register
- vide (L) = 1 si L= sinon 0
Attention CAR, CDR : liste NON VIDE
Longueur (L)= si vide(L) alors O
Sinon 1 + longueur(cdr(L))
deux(L)= car(cdr(L))
dernier(L)= si longueur()) alors 1
sinon dernier(cd
le dernier lts d'une fonction 1 elts est lui mm

sinon le denier elts de L prive de son premier elts


dernier1 (L)= si longueur(l) + 1 alors car(L)
sinon dernier(cdr(L))
dernier2 (L)= si vide(cdr(L)) alors car(L)
liste(N)= si N= 1 alors cons(1, )
sinon cons(N, liste(N-1))
recherche: fonction recursive