Anda di halaman 1dari 36

Langages de linformatique

Prof. Patrick Bellot

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

p. 1 - Licence des droits dusage en page 2.

Licence des droits dusage

Langages de linformatique

Patrick Bellot

Introduction

Les langages

Les paradigmes Par le telechargement ou la consultation de ce document, lutilisateur accepte la licence


Modele imperatif abstrait
dutilisation qui y est attachee, telle que detaillee dans les dispositions suivantes, et sengage a
Boehm et Jacopini
la respecter integralement.
Programmation imperative La licence des droits dusage de ce document confere a lutilisateur un droit dusage sur le
Programmation fonctionnelle document consulte ou telecharge, totalement ou en partie, dans les conditions definies ci-apres,
Programmation en logique et a lexclusion de toute utilisation commerciale.
Le droit dusage defini par la licence autorise un usage dans un cadre academique, par un
utilisateur donnant des cours dans un etablissement denseignement secondaire ou superieur et
a lexclusion expresse des formations commerciales et notamment de formation continue. Ce
droit comprend :
le droit de reproduire tout ou partie du document sur support informatique ou papier,
le droit de diuser tout ou partie du document a destination des eleves ou etudiants.
Aucune modification du document dans son contenu, sa forme ou sa presentation nest autorise.
Les mentions relatives a la source du document et/ou a son auteur doivent etre conservees dans
leur integralite.
Le droit dusage defini par la licence est personnel, non exclusif et non transmissible.
Tout autre usage que ceux prevus par la licence est soumis a autorisation prealable et expresse
de lauteur : bellot@telecom-paristech.fr.

p. 2 - Licence des droits dusage en page 2.


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

p. 3 - Licence des droits dusage en page 2.

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

Lere des pionniers est terminee et nous disposons de


langages de programmation.
p. 4 - Licence des droits dusage en page 2.
FORTRAN

Langages de linformatique

Patrick Bellot En 1958 (grande annee !), John W. BACKUS cree le


Introduction
premier langage de programmation : FORTRAN.
Les langages
00010 SUBROUTINE MP(A,B,C,N1,N2,N3)
Les paradigmes 00020 REAL A(N1,N3), B(N1,N2), C(N2,N3)
Modele imperatif abstrait
00030
Boehm et Jacopini
Programmation imperative 00040 DO 70 I=1,N3
Programmation fonctionnelle 00050 A(I,1) = A(I,1)+1
Programmation en logique
00060 CALL SMXPY(N2,A(I,1),N1,C(1,I),B)
00070 CONTINUE
00080
00090 RETURN
00100 END

Un programme appele compilateur traduit ce texte en


une suite de codes numeriques que lUAL de
lordinateur sait executer.

p. 5 - Licence des droits dusage en page 2.

Les Langages

Langages de linformatique

Patrick Bellot

Introduction FORTRAN(55) LISP

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)

ADA(83) EIFFEL SMALLTALK(80) COMMON LISP(81)

C++(86)
ADA(9x) JAVA

p. 6 - Licence des droits dusage en page 2.


Les Fonctions dun Langage

Langages de linformatique
Donner des noms symboliques aux mots de la memoire
Patrick Bellot

Introduction Lorsque nous ecrivons en C :


Les langages
int i ;
Les paradigmes
Modele imperatif abstrait
...
Boehm et Jacopini i = i+2 ;
Programmation imperative
Programmation fonctionnelle
Programmation en logique le compilateur se charge de trouver un mot dans la memoire pour ranger
lentier i, disons a lADRESSE 0x00001000, et genere le code suivant :

movi r1,0x00001000 -> 0x0a 0x01 0x00 0x00 0x10 0x00


load r2,*r1 -> 0x13 0x21
addi r2,0x00000002 -> 0x24 0x02 0x00 0x00 0x00 0x02
store r2,*r1 -> 0x15 0x21

Le programmeur ne se preoccupe pas de ladresse en memoire de la


variable i. Cette adresse nest pas obligatoirement fixee comme dans
lexemple ci-dessus. Cest meme assez rare. En general, elle varie dune
execution du programme a une autre.
p. 7 - Licence des droits dusage en page 2.

Les Fonctions dun Langage

Langages de linformatique
Gerer la representation binaire des donnees
Patrick Bellot

Lorsque nous ecrivons en C :


Introduction

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 ;

le compilateur se charge de calculer la TAILLE des donnees et de


reserver la zone memoire correspondante.
p. 8 - Licence des droits dusage en page 2.
Les Fonctions dun Langage

Langages de linformatique

Patrick Bellot Allocations et desallocations de memoire

Introduction Lorsque nous ecrivons en Ada :


Les langages

Les paradigmes function MIRROR(A : STRING) return STRING is


Modele imperatif abstrait RESULT : STRING(ARANGE) ;
Boehm et Jacopini
begin
Programmation imperative
Programmation fonctionnelle
for N in ARANGE loop
Programmation en logique RESULT(N) := A(ALAST-(N-AFIRST)) ;
end loop ;
return RESULT ;
end MIRROR ;
...
MESSAGE : constant STRING := "hello" ;
...
S := MIRROR(MESSAGE) ;

Lors de lappel de la fonction MIRROR, une variable de type STRING est


creee. Le langage a donc du allouer une zone de memoire.
p. 9 - Licence des droits dusage en page 2.

Les Fonctions dun Langage

Langages de linformatique

Patrick Bellot

Introduction

Les langages Allocations et desallocations de memoire


Les paradigmes
Modele imperatif abstrait De meme, lorsque nous ecrivons en C :
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle int f() {
Programmation en logique
etudiant e ;
...
} ;

une variable de type etudiant est creee (allouee) a lentree de la


fonction f, elle sera detruite (desallouee) a la sortie de la fonction et la
memoire utilisee sera rendue au systeme.

p. 10 - Licence des droits dusage en page 2.


Les Fonctions dun Langage

Langages de linformatique

Patrick Bellot

Realiser des construtions classiques


Introduction

Les langages

Les paradigmes Appels de procedures et de fonctions :


Modele imperatif abstrait A := produit_matrice(B,C) ;
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle Structures de controle de lexecution :
Programmation en logique
while (i < 100) { ... } ;
for (int i=0;i<100;i++) { ... } ;
repeat { ... } until (i > 100) ;
if (i > 100) then { ... } else { ... } ;

Gerer les declarations de types et les acces aux composantes des


donnees.
Gerer la visibilite des donnees et des programmes.

p. 11 - Licence des droits dusage en page 2.

Les Fonctions dun Langage

Langages de linformatique

Patrick Bellot
Liberer des contraintes hard et soft

Introduction Lorsque nous ecrivons en C :


Les langages
etudiant *ptr = (etudiant *)malloc(sizeof(etudiant)) ;
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
nous faisons appel a une fonction malloc qui alloue une zone de
Programmation imperative memoire et vous rend lADRESSE, un POINTEUR, sur le debut de
Programmation fonctionnelle cette zone. Cette fonction est fournie dans une LIBRAIRIE de fonctions
Programmation en logique
attachee au compilateur. Elle est DEPENDANTE du systeme
dexploitation.
Lorsque nous ecrivons en C :

int i ;

nous ecrivons quelque chose de TRES DEPENDANT de lordinateur sur


lequel on est.
Le langage de programmation assure la PORTABILITE des
programmes : un programme ecrit en langage C sous Unix pourra
theoriquement etre recompile et execute sur un autre ordinateur ayant
eventuellement un autre systeme dexploitation.
p. 12 - Licence des droits dusage en page 2.
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

p. 13 - Licence des droits dusage en page 2.

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.

p. 14 - Licence des droits dusage en page 2.


Les paradigmes

Langages de linformatique Dautres classes de langages sont moins importantes


Patrick Bellot mais neanmoins tres utiles :
Introduction les langages pour le parallelisme : Ada,
Les langages Concurrent xxxx, etc.
Les paradigmes
Modele imperatif abstrait
les langages de script imperatifs ;
Boehm et Jacopini
Programmation imperative les langages specialises (en general imperatifs) qui
Programmation fonctionnelle
Programmation en logique
proposent des fonctionalites specifiques : Perl,
Python, etc.
les langages de simulation ;
les langages a flots de donnees : Id, SiSal, etc.
les langages de programmation sans variable : FP,
Graal, APL, etc.
les langages synchrones, les langages reactifs, les
langages de programmation evenementielle, etc.
p. 15 - Licence des droits dusage en page 2.

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

Un programme est compose de suites dinstructions


encadrees par des structures de controle de lexecution :

boucles for, while, until, etc.


if - then -, if - then - else -, etc.
instruction goto ;
appels de procedures et de fonctions ;
echappements, exceptions, etc.
p. 16 - Licence des droits dusage en page 2.
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

p. 17 - Licence des droits dusage en page 2.

Le Modele Imperatif Abstrait

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

p. 18 - Licence des droits dusage en page 2.


Le Modele Imperatif Abstrait

Langages de linformatique

Patrick Bellot Exemple dun programme daddition


Introduction
Pre-condition : B et C sont des variables contenant
Les langages

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 ;

Post-condition : A contient B+C, C vaut zero et B est


inchange.
p. 19 - Licence des droits dusage en page 2.

Representation graphique des programmes :


lorganigramme
Langages de linformatique

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

p. 20 - Licence des droits dusage en page 2.


Le Modele Imperatif Abstrait

Langages de linformatique

Patrick Bellot

Introduction

Les langages Il fut un temps pas si lointain ou lon programmait ainsi


Les paradigmes
Modele imperatif abstrait
avec quelques ameliorations.
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
Ce temps a pris fin avec avec Algol et surtout le
meritant Pascal.

La grande avancee theorique fut le dicile


Theoreme de Boehm et Jacopini

p. 21 - Licence des droits dusage en page 2.

Le Modele Imperatif Abstrait

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.

p. 22 - Licence des droits dusage en page 2.


Le Modele Imperatif Abstrait

Langages de linformatique

Patrick Bellot
Structure while

Introduction while <condition> do {


Les langages <instruction 1>
Les paradigmes ...
Modele imperatif abstrait
Boehm et Jacopini
<instruction k>
Programmation imperative } ;
Programmation fonctionnelle
Programmation en logique
devient :

n: if (not <condition>) goto n+k+2 ;


n+1: <instruction 1>
...
n+k: <instruction k>
n+k+1: goto n ;
n+k+2:

p. 23 - Licence des droits dusage en page 2.

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 ;

p. 24 - Licence des droits dusage en page 2.


Example

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++ ;
} ;

p. 25 - Licence des droits dusage en page 2.

Example

Langages de linformatique

Patrick Bellot Structure if-then


Introduction
if <condition> {
Les langages
<instruction 1>
Les paradigmes
Modele imperatif abstrait
...
Boehm et Jacopini <instruction k>
Programmation imperative
Programmation fonctionnelle
} ;
Programmation en logique

devient :

n: if (not <condition>) goto n+k+1 ;


n+1: <instruction 1>
...
n+k: <instruction k>
n+k+1:

p. 26 - Licence des droits dusage en page 2.


Example

Langages de linformatique

Patrick Bellot

Introduction Structure if-then-else


Les langages

Les paradigmes n: if (not <condition>)


if <condition> {
Modele imperatif abstrait goto n+i+2 ;
Boehm et Jacopini <instruction 1>
n+1: <instruction 1>
Programmation imperative ...
Programmation fonctionnelle ...
<instruction i>
Programmation en logique n+i: <instruction i>
} else { devient :
n+i+1: goto n+i+j+2 ;
<instruction 1>
n+i+2: <instruction 1>
...
...
<instruction j>
n+i+j+1: <instruction j>
} ;
n+i+j+2:

p. 27 - Licence des droits dusage en page 2.

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

p. 28 - Licence des droits dusage en page 2.


Le Modele Imperatif Abstrait

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.

p. 29 - Licence des droits dusage en page 2.

Le Modele Imperatif Abstrait

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

Mais est-ce possible de tout programmer avec ces


structures de controle ? Nexiste-t-il pas des
algorithmes que lon peut exprimer avec des goto(s) et
que lon ne peut pas exprimer sans ces goto(s) ?

p. 30 - Licence des droits dusage en page 2.


Le Modele Imperatif Abstrait

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.

La voie est ouverte vers la programmation moderne.

p. 31 - Licence des droits dusage en page 2.

Le Modele Imperatif Abstrait

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 ;
} ;

p. 32 - Licence des droits dusage en page 2.


Le Modele Imperatif Abstrait

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 !

Cependant on reservera lusage du goto au traitement


dexceptions tres simples.

Exemple : le traitement dune requete SQL.

p. 33 - Licence des droits dusage en page 2.

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

p. 34 - Licence des droits dusage en page 2.


Les caracteristiques de limperatif

Langages de linformatique

Patrick Bellot

Introduction Cest au programmeur quincombe la gestion de


Les langages lexecution du programme.
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Le programme imperatif est compose dinstructions a
Programmation fonctionnelle
Programmation en logique
linterieur de structures de controle embotees.

Ce sont ces structures, utilisees par le programmeur,


qui decident ce qui doit etre executer et dans quel ordre
cela doit letre.

p. 35 - Licence des droits dusage en page 2.

Les caracteristiques de limperatif

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

Cest a lui de decider de la duree de vie des variables.

Cest a lui de decider ce quelles contiendront et quand.

Cest a lui quincombe la gestion de la memoire utilisee


par son programme pour y ranger les donnees.

p. 36 - Licence des droits dusage en page 2.


Les caracteristiques de limperatif

Langages de linformatique

Patrick Bellot La programmation imperative est une programmation


Introduction
pas a pas et mot a mot.
Les langages Exemple :
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini ps := 0 ;
Programmation imperative
Programmation fonctionnelle for i:=1 to N do
Programmation en logique
ps := ps + A[i]*B[i] ;

Les langages imperatifs sont rigides. On ne peut y


definir des extensions telles que de nouvelles structures
de controle. Cest pourquoi la documentation de ces
langages est souvent tres lourde.

p. 37 - Licence des droits dusage en page 2.

Les caracteristiques de limperatif

Langages de linformatique

Patrick Bellot Une autre caracteristique des langages imperatifs est


quils se ressemblent tous :
Introduction

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

De fait, les dierences entre les langages imperatifs


sont avant tout dans la syntaxe et les outils specifiques.
Lideal est dapprendre un langage de tres haut niveau
comme Ada et un autre de tres bas niveau comme C.

p. 38 - Licence des droits dusage en page 2.


Une proposition de John W. Backus

Langages de linformatique

Patrick Bellot

En sa basant sur le langage APL et sur la


Introduction

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 !

p. 39 - Licence des droits dusage en page 2.

Une proposition de John W. Backus

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

La fonction de distribution a droite :

distr : [[a1 , . . . , an ], b] = [[a1 , b], . . . , [an , b]]

p. 40 - Licence des droits dusage en page 2.


Une proposition de John W. Backus

Langages de linformatique Loperateur de reduction / :


Patrick Bellot

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 ]

p. 41 - Licence des droits dusage en page 2.

Une proposition de John W. Backus

Langages de linformatique

Patrick Bellot La fonction produit scalaire:


Introduction

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

pmv = (ps) o distr

La fonction produit de matrice-matrice:

pmm = (pmv ) o distr o [#1, trans o #2]

p. 42 - Licence des droits dusage en page 2.


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

p. 43 - Licence des droits dusage en page 2.

Le Paradigme Fonctionnel

Langages de linformatique

Patrick Bellot Ne en meme temps que le paradigme imperatif, le


paradigme fonctionnel est issu de la theorie
Introduction

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

These de Church : avec des fonctions, on peut calculer


tout ce qui est calculable.

p. 44 - Licence des droits dusage en page 2.


Le Paradigme Fonctionnel

Langages de linformatique Le principe de base de la programmation est la recursivite. Il


Patrick Bellot ne viendrait jamais a lidee dun programmeur fonctionnel
competent de programmer avec une boucle...
Introduction
(defun f91(x) int f91(int x) {
Les langages
(if (> x 100) if (x > 100)
Les paradigmes (- x 10) return x-10 ;
Modele imperatif abstrait
(f91 (f91 (+ x 11))))) return f91(f91(x+11)) ;
Boehm et Jacopini
Programmation imperative
}
Programmation fonctionnelle
Programmation en logique
(def tak(x y z) int tak(int x, int y, int z) {
(if (<= x y) if (x <= y)
y return y ;
(tak (tak (- x 1) y z) return tak(tak(x-1,y,z),
(tak (- y 1) z x) tak(y-1,z,x),
(tak (- z 1) x y)))) tak(z-1,x,y)) ;
}
(def fact(n) int fact(int n) {
(if (= n 0) return
1 (n == 0)
(* n (fact (- n 1))))) ?1
:(n * fact(n-1)) ;}
p. 45 - Licence des droits dusage en page 2.

Le Paradigme Fonctionnel

Langages de linformatique

Patrick Bellot Programme = Donnee


Introduction

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

Un programme peut etre donne de maniere anonyme :


? (twice (lambda (x) (+ x 1)) 1)
= 3

(lambda (x) (+ x 1)), soit (x.x + 1) dans la notation


mathematique du -calcul, est une fonction anonyme.
p. 46 - Licence des droits dusage en page 2.
Le Paradigme Fonctionnel

Langages de linformatique

Patrick Bellot La structure de liste


Introduction
La structure de liste est une structure de listes chanees
Les langages
qui sont construites a laide de doublets de listes
Les paradigmes
Modele imperatif abstrait appeles cons :
Boehm et Jacopini
Programmation imperative nil ou () est la liste de vide ;
Programmation fonctionnelle
Programmation en logique
(cons x y) permet de construire un doublet dont
le premier elements est x et le deuxieme est y ;
(car d) permet dextraire la premiere composante
dun doublet ;
(cdr d) permet dextraire la seconde composante
dun doublet ;
(null x) permet de distinguer un doublet de la
liste vide.
p. 47 - Licence des droits dusage en page 2.

Le Paradigme Fonctionnel

Langages de linformatique Un doublet est note (a . b)


Patrick Bellot Une liste est notee (a b c d)
Introduction Cest en fait (a . (b . (c . (d .()))))
Les langages On parle de :
Les paradigmes tete ou car de liste pour le premier element ;
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
et de queue ou cdr de liste pour la liste privee de
Programmation fonctionnelle son premier eleement.
Programmation en logique

? (defun last(x)
(if (null (cdr x))
(car list)
(last (cdr x))))
= last
? (last (a b c d))
= d

NB. Les programmes sont des listes.


p. 48 - Licence des droits dusage en page 2.
Le Paradigme Fonctionnel

Langages de linformatique

Patrick Bellot

Introduction

Les langages Les listes sont gerees dynamiquement


Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Elles sont allouees par cons.
Programmation fonctionnelle
Programmation en logique

Elles sont recuperees automatiquement.


Garbage Collector

NB. Filiation : Lisp SmallTalk Java.

p. 49 - Licence des droits dusage en page 2.

Le Paradigme Fonctionnel

Langages de linformatique

Patrick Bellot La Reflexivite


Introduction

Les langages Lisp est ecrit en Lisp.


Les paradigmes
Modele imperatif abstrait Lisp est reflexif.
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Programmation en logique
(defun toplevel()
(forever
(print (eval (read)))))

Tout y est redefinissable.


Redefinir read et print permet de changer la
syntaxe du langage.
Redefinir eval permet de redefinir la semantique
du langage.
p. 50 - Licence des droits dusage en page 2.
Le Paradigme Fonctionnel

Langages de linformatique

Patrick Bellot
La Reflexivite
Introduction

Les langages

Les paradigmes Gag de premiere annee de Lisp:


Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative ? (defun eval(x) IMBECILE)
Programmation fonctionnelle
Programmation en logique
= eval
? (+ x 1)
= IMBECILE
? (quit)
= IMBECILE

NB. SmallTalk est un langage reflexif.


NB. Java est un langage partiellement reflexif.

p. 51 - Licence des droits dusage en page 2.

Extension du langage lui-meme

Langages de linformatique

Patrick Bellot

Introduction

Les langages Toujours la Reflexivite


Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Programmation fonctionnelle
Exempe ne fonctionnant pas car cest legerement plus
Programmation en logique
complique a realiser mais on nest pas la pour
apprendre Lisp !!!

(defun ifn(p f g) (if p g f))

p. 52 - Licence des droits dusage en page 2.


Redefinition dynamique

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

p. 53 - Licence des droits dusage en page 2.

Les inventions de Lisp

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 !

p. 54 - Licence des droits dusage en page 2.


Les caracteristiques du fonctionnel

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

p. 55 - Licence des droits dusage en page 2.

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.

p. 56 - Licence des droits dusage en page 2.


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

p. 57 - Licence des droits dusage en page 2.

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

N.B. Colmerauer 1973 et Kowalski 1974.


p. 58 - Licence des droits dusage en page 2.
Le Paradigme Logique

Langages de linformatique On programme des Relations entre des donnees


Patrick Bellot representees par des atomes, symboles et nombres, et
Introduction des termes (fonctionnels), exemple : voiture(jean)
Les langages Des Faits :
Les paradigmes pere(patrick,jerome).
Modele imperatif abstrait
pere(patrick,helene).
Boehm et Jacopini
Programmation imperative
pere(patrick,camille).
Programmation fonctionnelle pere(patrick,daniel).
Programmation en logique mere(marianne,jerome).
mere(marianne,helene).
mere(fadila,camille).
mere(lam,daniel).

Des Relations :
parent(X,Y) :- pere(X,Y).
parent(X,Y) :- mere(X,Y).

grand-pere(X,Y) :- pere(X,Z), parent(Z,Y).


grand-mere(X,Y) :- mere(X,Z), parent(Z,Y).
p. 59 - Licence des droits dusage en page 2.

Le Paradigme Logique

Langages de linformatique

Patrick Bellot Symbole


Introduction
Un symbole commence par une lettre minuscule.
Les langages

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

Un terme fonctionnel est symbole de fonction applique a


dautres termes. Il na pas de valeur. Il sert a designer.
Exemple : on decide que le terme voiture(X) designe la
voiture de X.

couleur(voiture(patrick), bleu).

p. 60 - Licence des droits dusage en page 2.


Le Paradigme Logique

Langages de linformatique

Patrick Bellot Les buts (ou queries ou question)


Introduction Tester :
Les langages
?- pere(patrick,camille).
Les paradigmes OK
Modele imperatif abstrait
?- pere(patrick,julie).
Boehm et Jacopini
Programmation imperative
NO
Programmation fonctionnelle
Programmation en logique Chercher :
?- pere(patrick,X).
X=jerome, OK
X=helene, OK
X=camille, OK

?- couleur(voiture(X),bleu).
X=patrick, OK

?- couleur(voiture(X),rose).
NO

p. 61 - Licence des droits dusage en page 2.

Le Paradigme Logique

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

p. 62 - Licence des droits dusage en page 2.


Le Paradigme Logique

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.

Necessite doutils de controle imperatif :


le Cut qui detruit la branche de recherche en cours ;
le gel qui permet de retarder la resolution dun but
intermediaire jusqua ce quune variable soit liee a une
valeur
Pas de calcul : pas darithmetique.
Dou la necessite dajouts imperatifs comme Z is X+Y.
p. 63 - Licence des droits dusage en page 2.

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

Comment colorier une carte avec 4 couleurs (r,j,v,b) de


telle maniere que 2 zones contigues aient des couleurs
dierentes ?

p. 64 - Licence des droits dusage en page 2.


Le coloriage de carte

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

Un but color(X) a quatre solutions qui seront trouvee dans 4


branches de demonstration dierentes correspondant aux 4 faits
ci-dessus.

p. 65 - Licence des droits dusage en page 2.

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

carte(A,B,C,D,E,F,G,H) est un predicat signifiant que


A,B,C,D,E,F,G,H sont des couleurs contituant un coloriage
admissible pour la carte: la couleur A coloriant la zone marquee A, la
couleur B coloriant la zone marquee B, etc.

p. 66 - Licence des droits dusage en page 2.


Le coloriage de carte

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

Phase Generate. Le programme genere toutes les solutions


envisageables, cest-a-dire tous les coloriages possibles. Pour cela,
on utilise le predicat color(X) qui genere 4 branches de
demonstration pour chacune des valeurs possibles de X.
Phase Test. Le programme controle si la solution generee est
conforme. Pour cela, il sut de tester si les couleurs de deux
zones contigues sont bien dierentes.

p. 67 - Licence des droits dusage en page 2.

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.

Lalgorithme est juste mais il y a un probleme. Lequel ?


p. 68 - Licence des droits dusage en page 2.
Le coloriage de carte

Langages de linformatique

Patrick Bellot
Solution: Mixer Generate and Test pour couper plus tot les branches de
Introduction la demonstration.
Les langages

Les paradigmes carte(A,B,C,D,E,F,G,H) :-


Modele imperatif abstrait color(A),
Boehm et Jacopini color(B), A /= B,
Programmation imperative
color(C), B /= C,
Programmation fonctionnelle
Programmation en logique
color(D), A /= D, B /= D, C /= D,
color(E), A /= E, C /= E, D /= E,
color(F), C /= F, E /= F,
color(G), C /= G, E /= G, F /= G,
color(H), C /= H, F /= H, G /= H.

Lalgorithme est juste et le probleme algorithmique est resolu.


Cependant, la programmation nest plus totalement logique.

p. 69 - Licence des droits dusage en page 2.

Le Paradigme Logique

Langages de linformatique
Les contraintes
Patrick Bellot
Dernier grand avatar de Prolog
Introduction

Les langages Objectif : etre le plus logique possible en gardant la


Les paradigmes resolution SLDNF et fournir un outil puissant.
Modele imperatif abstrait
Boehm et Jacopini
Programmation imperative
Domaines Finis
Programmation fonctionnelle
Programmation en logique On declare que les variables concernees appartiennent a
des domaines finis, ex : 1..34. On pose des contraintes
sur ces variables, ex : X >= 0, X+Y=0...
Domaines Continus
Essentiellement des contraintes sur les nombres reels.
Resolution
Un moteur exterieur.
p. 70 - Licence des droits dusage en page 2.
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
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

color(A), color(B), color(C), color(D),


color(E), color(F), color(G), color(H),.

p. 71 - Licence des droits dusage Lalgorithme


en page 2. redevient logique.

Le Paradigme Logique

Langages de linformatique

Patrick Bellot

Introduction Les remarques qui sappliquent a Lisp sappliquent


Les langages egalement a Prolog.
Les paradigmes
Modele imperatif abstrait
Boehm et Jacopini On programme rarement en purement logique.
Programmation imperative
Programmation fonctionnelle
Programmation en logique
Prolog est particulierement adaptes aux strategies
dessai-erreur, aux problemes de recherche arborescente,
aux problemes de planification, aux systemes experts,
etc. Toute une algorithmique specifique.

Prolog est aussi un langage reflexif.

p. 72 - Licence des droits dusage en page 2.

Anda mungkin juga menyukai