Introduction
Les langages
Les paradigmes
Modele imperatif abstrait
Langages de linformatique
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique Prof. Patrick Bellot
Telecom ParisTech
Langages de linformatique
Patrick Bellot
Introduction
Les langages
Langages de linformatique
Patrick Bellot
Introduction
1 Introduction
Les langages
Les paradigmes
Modele imperatif abstrait 2 Les langages
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
3 Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
Les Langages
Langages de linformatique
Patrick Bellot
Dans les annees 50, on programmait les ordinateurs en
ecrivant directement des suites doctets, parfois en
Introduction
binaire !
Les langages
Les paradigmes
Modele imperatif abstrait
0x12 0x23 0xA7 0x56 0xff 0x00 0x56 0x12 0x34
Boehm et Jacopini
Programmation imperative
0xf3 0x45 0x23 0x12 0xf5 0xaf 0xee 0x23 0x56
Programmation fonctionnelle 0x12 0x56 0x58 0xba 0xb2 0x78 0x83 0x87 0xa1
Programmation en logique
0x72 0xab 0xbe 0x55 0x00 0xfe 0x76 0xaa 0x12
0x76 0x23 0xff 0xbe 0xaf 0xcc 0xc0 0xc4 0x33
0x56 0x56 0x23 0x32 .... .... .... ....
BUG !!!
Langages de linformatique
Les Langages
Langages de linformatique
Patrick Bellot
Les langages
COBOL(60) ALGOL(60) BASIC APL(62)
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
ALGOL(68)
Programmation imperative PL/1(65)
Programmation fonctionnelle
Programmation en logique SNOBOL(71) PASCAL(71) SIMULA(68)
C(69) SCHEME(75) ML
PROLOG ADA(75) FP(78) SMALLTALK(71)
C++(86)
ADA(9x) JAVA
Langages de linformatique
Donner des noms symboliques aux mots de la memoire
Patrick Bellot
Langages de linformatique
Gerer la representation binaire des donnees
Patrick Bellot
Les langages
float f ;
Les paradigmes
Modele imperatif abstrait
le compilateur se charge de trouver deux mots dans la memoire pour
Boehm et Jacopini
Programmation imperative
ranger le nombre flottant f. La REPRESENTATION BINAIRE du
Programmation fonctionnelle nombre flottant peut dependre du systeme dexploitation.
Programmation en logique De meme, lorsque nous ecrivons en Pascal :
type
etudiant = record
nom : array[1..25] of character ;
prenom : array[1..25] of character ;
end ;
var
e : etudiant ;
Langages de linformatique
Langages de linformatique
Patrick Bellot
Introduction
Langages de linformatique
Patrick Bellot
Les langages
Langages de linformatique
Patrick Bellot
Liberer des contraintes hard et soft
int i ;
Langages de linformatique
Patrick Bellot
Introduction
1 Introduction
Les langages
Les paradigmes
Modele imperatif abstrait 2 Les langages
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
3 Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
Les paradigmes
Langages de linformatique
Patrick Bellot
Il nexiste pas quun seul type de langage de
Introduction
programmation. Ces langages sont regroupes en
Les langages
classes. Les principales classes sont :
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
la programmation imperative : C, Ada, Pascal,
Programmation imperative
Programmation fonctionnelle
Fortran, Cobol, etc.
Programmation en logique
la programmation a objets et a acteurs : C++ ,
Java, Eiel, SmallTalk, ActTalk, etc.
la programmation fonctionnelle : Lisp, Scheme,
Caml, etc.
la programmation en logique : Prolog et ses
dierentes variantes.
Le Paradigme Imperatif
Langages de linformatique Le paradigme imperatif tient son nom du fait que les
Patrick Bellot programmes sont des suites dinstructions, des ordres
Introduction que lordinateur doit executer.
Les langages int vec[100] ;
Les paradigmes ...
Modele imperatif abstrait int somme = 0 ;
Boehm et Jacopini for (int i=0;i<100;i++)
Programmation imperative
Programmation fonctionnelle
somme += vec[i] ;
Programmation en logique
Langages de linformatique
Patrick Bellot
Introduction
1 Introduction
Les langages
Les paradigmes
Modele imperatif abstrait 2 Les langages
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
3 Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
Langages de linformatique
Patrick Bellot
Cest celui de la Machine de Von Neumann. Des
Introduction instructions sont ecrites consecutivement et numerotees
Les langages comme dans les vieux langages Basic. Deux types
Les paradigmes
Modele imperatif abstrait
dinstructions :
Boehm et Jacopini
Programmation imperative
linstruction daectation :
Programmation fonctionnelle
Programmation en logique
<variable> := <expression> ;
linstruction de saut conditionnel :
if <condition> goto <instruction> ;
et inconditionnel :
goto <instruction> ;
equivalente a :
if 0==0 goto <instruction> ;
Langages de linformatique
Les paradigmes
des entiers positifs et... on ne sait faire que les
Modele imperatif abstrait operations successeur (i.e. +1) et predecesseur (i.e.
Boehm et Jacopini
Programmation imperative -1) sur les entiers.
Programmation fonctionnelle
Programmation en logique
00 : A := B ;
01 : if (C == 0) goto 05 ;
02 : A := A + 1 ;
03 : C := C - 1 ;
04 : if (C <> 0) goto 02 ;
05 : end ;
Patrick Bellot
Introduction A := B
Les langages
Les paradigmes
Modele imperatif abstrait oui
C == 0
Boehm et Jacopini
Programmation imperative non
Programmation fonctionnelle
Programmation en logique
A := A + 1
C := C - 1
non
C == 0
oui
Langages de linformatique
Patrick Bellot
Introduction
Langages de linformatique
Patrick Bellot
Introduction
Les langages
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative Les structures de controle de lexecution peuvent etre
Programmation fonctionnelle
Programmation en logique
traduites en instructions elementaires du modele
imperatif abstrait.
Langages de linformatique
Patrick Bellot
Structure while
Example
Langages de linformatique
Patrick Bellot
Structure repeat
Introduction
Les langages
repeat {
Les paradigmes
<instruction 1>
Modele imperatif abstrait ...
Boehm et Jacopini
Programmation imperative
<instruction k>
Programmation fonctionnelle
} until <condition> ;
Programmation en logique
devient :
n: <instruction 1>
...
n+k-1: <instruction k>
n+k: if (not <condition>) goto n ;
Langages de linformatique
Structure for
Patrick Bellot
for (i=0;i<n;i++) {
Introduction
<instruction 1>
Les langages
...
Les paradigmes
Modele imperatif abstrait
<instruction k>
Boehm et Jacopini } ;
Programmation imperative
Programmation fonctionnelle
Programmation en logique devient :
i = 0 ;
while (i < n) {
<instruction 1>
...
<instruction k>
i++ ;
} ;
Example
Langages de linformatique
devient :
Langages de linformatique
Patrick Bellot
Plan
Langages de linformatique
Patrick Bellot
Introduction
1 Introduction
Les langages
Les paradigmes
Modele imperatif abstrait 2 Les langages
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
3 Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
Langages de linformatique
Patrick Bellot
Lidee nest, bien sur, pas de programmer avec des
Introduction structures de controle de lexecution evoluees et de les
Les langages traduire a la main dans le modele imperatif abstrait :
Les paradigmes
Modele imperatif abstrait
cela est le travail du COMPILATEUR du langage
Boehm et Jacopini comme nous allons le voir plus loin.
Programmation imperative
Programmation fonctionnelle
Programmation en logique Lidee est, bien entendu, de programmer tout
simplement avec ces structures de controle :
le programme est structure ;
la pensee du programmeur est structuree ;
le programme est plus comprehensible ;
il est possible de raisonner sur le programme.
Langages de linformatique
Patrick Bellot
Introduction
Les langages
Chacune de ces structures a une action bien precise et
Les paradigmes
connue de tous. Les structures sont hierarchiquement
Modele imperatif abstrait embotees. Cest le premier pas vers la programmation
Boehm et Jacopini
Programmation imperative structuree.
Programmation fonctionnelle
Programmation en logique
Langages de linformatique
Patrick Bellot
Introduction
Le theoreme de Boehm et Jacopini (1967) enonce que :
Les langages
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Tout programme comportant eventuellement des sauts
Programmation fonctionnelle
Programmation en logique
conditionnels peut etre reecrit en un programme
equivalent nutilisant que les structures de controle
while et if-then.
Langages de linformatique
Exemple :
Patrick Bellot
Introduction 000 : A := B ;
Les langages 001 : if (C == 0) goto 005 ;
Les paradigmes 002 : A := A + 1 ;
Modele imperatif abstrait
003 : C := C - 1 ;
Boehm et Jacopini
Programmation imperative 004 : if (C <> 0) goto 002 ;
Programmation fonctionnelle
Programmation en logique
005 : end ;
peut devenir :
A := B ;
while (C <> 0) {
A := A + 1 ;
C := C - 1 ;
} ;
Langages de linformatique
Patrick Bellot
Introduction
Les langages
Faut-il bannir les goto(s) ?
Les paradigmes
Modele imperatif abstrait La reponse academique est OUI !
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
La reponse pratique nest pas toujours OUI !
Plan
Langages de linformatique
Patrick Bellot
Introduction
1 Introduction
Les langages
Les paradigmes
Modele imperatif abstrait 2 Les langages
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
3 Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
Langages de linformatique
Patrick Bellot
Langages de linformatique
Patrick Bellot
Introduction
Cest au programmeur quincombe la gestion des
Les langages
donnees.
Les paradigmes
Modele imperatif abstrait Cest a lui que revient le devoir de declarer les types et
Boehm et Jacopini
Programmation imperative les variables.
Programmation fonctionnelle
Programmation en logique
Langages de linformatique
Langages de linformatique
Les langages The dierences between Fortan and Algol 68, although
Les paradigmes considerable are less significant than the fact that both
Modele imperatif abstrait
Boehm et Jacopini are based on the programming style of the Von
Programmation imperative
Programmation fonctionnelle Neumann computer. In fact, some may say that I bear
Programmation en logique
some responsability in this problem.
John W. Backus
Langages de linformatique
Patrick Bellot
Les langages
programmation fonctionnelle, John W. Backus a
Les paradigmes
propose les Systemes FP.
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Dans ces sytemes, 8 operateurs de haut niveau liberent
Programmation fonctionnelle le programmeur de la programmation pas-a-pas et
Programmation en logique
mot-a-mot.
Laspect fonctionnel libere le programmeur de la
gestion de la memoire, exactement comme pour Lisp
que nous verrons plus loin.
Le probleme ? Illisible !
Langages de linformatique
Patrick Bellot Dans les systemes FP, les arguments sont des
Introduction
sequences, les elements des sequences peuvent etre des
Les langages atomes ou dautres sequence.
Les paradigmes
Modele imperatif abstrait
La fonction de transposition (cas particulier) :
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
trans : [ [a1 , . . . , an ], [b1 , . . . , bn ]] = [[a1 , b1 ], . . . , [an , bn ]]
Introduction /(f , e) : [ ] = e
Les langages
Les paradigmes
Modele imperatif abstrait
/(f , e) : [x1 , x2 . . . , xn ] = f : [a1 , /(f , e) : [x2 , . . . , xn ]]
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique Loperateur de composition o :
f o g : x = f : (g : x)
Loperateur de distribution :
(f ) : [x1 , . . . , xn ] = [f : x1 , . . . , f : xn ]
Langages de linformatique
Les langages
ps = /(+, 0) o () o trans
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative La fonction produit de matrice-vecteur:
Programmation fonctionnelle
Programmation en logique
Langages de linformatique
Patrick Bellot
Introduction
1 Introduction
Les langages
Les paradigmes
Modele imperatif abstrait 2 Les langages
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
3 Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
Le Paradigme Fonctionnel
Langages de linformatique
Les langages
mathematique du -calcul dA. Church (1930). Il a ete
Les paradigmes
developpe a la fin des annees 50 par J. McCarthy avec
Modele imperatif abstrait le langage Lisp puis repris dans de nombreux langages
Boehm et Jacopini
Programmation imperative dont Scheme et ML.
Programmation fonctionnelle
Programmation en logique
Dans ces principes, on a lutilisation de fonctions pour
programmer :
(defun f(x) (+ x 1))
Le Paradigme Fonctionnel
Langages de linformatique
Les langages
? (defun twice(f x) (apply f (apply f x)))
Les paradigmes = twice
Modele imperatif abstrait
? (defun z(x) (+ x 1))
Boehm et Jacopini
Programmation imperative
= z
Programmation fonctionnelle ? (twice z 1)
Programmation en logique = 3
Langages de linformatique
Le Paradigme Fonctionnel
? (defun last(x)
(if (null (cdr x))
(car list)
(last (cdr x))))
= last
? (last (a b c d))
= d
Langages de linformatique
Patrick Bellot
Introduction
Le Paradigme Fonctionnel
Langages de linformatique
Langages de linformatique
Patrick Bellot
La Reflexivite
Introduction
Les langages
Langages de linformatique
Patrick Bellot
Introduction
Langages de linformatique
Toujours la Reflexivite
Patrick Bellot
Introduction
Limprimeur print est normalement ecrit en Lisp et
Les langages
utilise la fonction primitive print-char chaque fois quil
Les paradigmes veut imprimer un caractere...
Modele imperatif abstrait
Boehm et Jacopini
Limprimeur pretty-print a la meme fonction de
Programmation imperative
print mais il eectue une impression plus jolie avec des
Programmation fonctionnelle
Programmation en logique indentations et tient compte de la longueur de ligne a
lachage. Pour cela, il doit calculer la longueur
dimpression, i.e. le nombre de caracteres, des
expressions quil imprime.
(defun print-length (expr)
(let ((compteur 0))
(flet ((print-char (c) (incr compteur)))
(print expr)
compteur)))
Langages de linformatique
Patrick Bellot
Lisp a ete un formidable laboratoire !
Introduction La reflexivite.
Les langages La recursivite.
Les paradigmes
Modele imperatif abstrait
Les listes.
Boehm et Jacopini Linterpretation.
Programmation imperative
Programmation fonctionnelle Les fonctions, objets de 1ere classe.
Programmation en logique
Les operateurs (un peu comme dans les systemes FP).
Le Garbage Collector.
Les exceptions.
Les machines virtuelles.
SmallTalk et la POO.
Levaluation partielle.
Mais la normalisation de Lisp a tue Lisp !
Langages de linformatique
Patrick Bellot
Le programmeur ne gere pas lexecution de son
Introduction
programme.
Les langages
FAUX DANS LA PRATIQUE
Les paradigmes
Modele imperatif abstrait
Structure de controle imperative. Ordre devaluation.
Boehm et Jacopini
Programmation imperative Le programmeur ne gere pas lutilisation de la memoire.
Programmation fonctionnelle
Programmation en logique VRAI
Mais le GC nest pas gratuit.
La programmation est plus rigoureuse, naturelle et
facile.
VRAI SI ON LE VEUT
Mais la meme discipline peut etre utilisee dans dautres
langages. Meme en C...
Le Paradigme Fonctionnel
Langages de linformatique
Patrick Bellot
Introduction Applications
Les langages
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
xemacs/emacs est ecrit en Lisp.
Programmation imperative
Programmation fonctionnelle SmallTalk a ete ecrit en Lisp.
Programmation en logique
De nombreux systemes experts sont ecrits en Lisp.
Des programmes dapprentissage sont ecrits en
Lisp.
En regle generale, lI.A. (a qui Lisp doit
beaucoup), lorsquelle na pas pas particulierement
besoin de performances, aime bien utiliser Lisp.
Langages de linformatique
Patrick Bellot
Introduction
1 Introduction
Les langages
Les paradigmes
Modele imperatif abstrait 2 Les langages
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
3 Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
Le Paradigme Logique
Langages de linformatique
Nee a Marseille dans les annees 70, la programmation
Patrick Bellot
en logique permet dutiliser une categorie restreinte de
Introduction
formules logiques pour programmer : les clauses
Les langages
de Horn.
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Clause de Horn
Programmation fonctionnelle
Programmation en logique
Si q1 (x, . . .) et et qn (x, . . .) alors p(x, . . .)
q1 (x, . . .) qn (x, . . .) p(x, . . .)
p(x, . . .) si q1 (x, . . .) et et qn (x, . . .)
p(x, . . .) q1 (x, . . .) qn (x, . . .)
Clause Prolog
p(x,...) :- q1(x,...), ... , qn(x,...).
Des Relations :
parent(X,Y) :- pere(X,Y).
parent(X,Y) :- mere(X,Y).
Le Paradigme Logique
Langages de linformatique
Les paradigmes
Modele imperatif abstrait
Variable
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Une variable commence par une lettre majuscule.
Programmation en logique
Termes Fonctionnels
couleur(voiture(patrick), bleu).
Langages de linformatique
?- couleur(voiture(X),bleu).
X=patrick, OK
?- couleur(voiture(X),rose).
NO
Le Paradigme Logique
Langages de linformatique
Les paradigmes
Modele imperatif abstrait
Basee sur lUnification. Unifier deux termes, cest touver les
Boehm et Jacopini
Programmation imperative
valeurs aux variables quils contiennent pour que les deux termes
Programmation fonctionnelle soient syntaxiquement identiques.
Programmation en logique
Exemple: g(f(X,Y),Z,2,U) et g(f(1,3),Y,T,V)
Lunification donne : X=1, Y=Z=3, T=2, U=V
Cest un algorithme tres ecace !
p(a,b) avec une clause
Resolution dun but
p(x,y) :- q1(...), ..., qn(...).:
Unification du but p(a,b) avec la tete de clause
p(x,y).
Si succes, demonstration de q1(...), ..., qn(...)
dans lenvironment resultant de lunification.
Langages de linformatique
Patrick Bellot
La methode de resolution (demonstration) des buts de
Prolog sappelle la SLDNF-resolution.
Introduction Selection, Linear, Definite, Negation as failure
Les langages
Les paradigmes
Modele imperatif abstrait
Negation par lechec : ce qui nest pas vrai est faux (hypothese
Boehm et Jacopini du monde clos). Ce nest pas la negation logique.
Programmation imperative
Programmation fonctionnelle Resolution utilisant lordre denregistrement des clauses et des
Programmation en logique
faits : rien de logique. Le programmeur doit faire tres attention a
lordre des clauses.
Le coloriage de carte
Langages de linformatique
Patrick Bellot
Introduction
Les langages A E F
G
Les paradigmes
Modele imperatif abstrait B
Boehm et Jacopini
Programmation imperative
H
Programmation fonctionnelle D
Programmation en logique C
Langages de linformatique
Patrick Bellot
Definir les couleurs
Introduction
Les langages
Les paradigmes color(C) est un predicat signifiant que C est une couleur pour la
Modele imperatif abstrait carte. Il est defini par 4 faits :
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique color(r).
color(j).
color(v).
color(b).
Le coloriage de carte
Langages de linformatique
Patrick Bellot
Introduction A E F
G
Les langages
B
Les paradigmes
H
Modele imperatif abstrait D
Boehm et Jacopini C
Programmation imperative
Programmation fonctionnelle
Programmation en logique
Poser le probleme
Langages de linformatique
Patrick Bellot A E F
G
Introduction B
H
Les langages D
C
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
Algotithmique Generate-and-test
Le coloriage de carte
Langages de linformatique
A E F
Patrick Bellot G
B
Introduction H
D
Les langages C
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative carte(A,B,C,D,E,F,G,H) :-
Programmation fonctionnelle
Programmation en logique
color(A), color(B), color(C), color(D),
color(E), color(F), color(G), color(H),
A /= B, A /= D, A /= E,
B /= C, B /= D,
C /= D, C /= E, C /= F, C /= G, C /= H,
D /= E,
E /= F, E /= G,
F /= G, F /= H,
G /= H.
Langages de linformatique
Patrick Bellot
Solution: Mixer Generate and Test pour couper plus tot les branches de
Introduction la demonstration.
Les langages
Le Paradigme Logique
Langages de linformatique
Les contraintes
Patrick Bellot
Dernier grand avatar de Prolog
Introduction
Langages de linformatique
A E F
Patrick Bellot G
B
Introduction H
D
Les langages C
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Avec des contraintes:
Programmation imperative
Programmation fonctionnelle carte(A,B,C,D,E,F,G,H) :-
Programmation en logique
A /= B, A /= D, A /= E,
B /= C, B /= D,
C /= D, C /= E, C /= F, C /= G, C /= H,
D /= E,
E /= F, E /= G,
F /= G, F /= H,
G /= H
Le Paradigme Logique
Langages de linformatique
Patrick Bellot