Introduction a la programmation en Common Lisp.pdf
(
136 KB
)
Pobierz
Introduction à la programmation
en Common Lisp
Francis Leboutte
Le 26 novembre 2002
Mise à jour mineure : le 1
er
février 2004
www.algo.be
IDDN.BE.010.0093308.000.R.C.2001.035.42000
Table des matières
1.
2.
3.
INTRODUCTION................................................................................................................ 3
ORDINATEUR ET LANGAGE DE PROGRAMMATION ........................................... 3
PREMIER CONTACT, PREMIER PROGRAMME....................................................... 4
3.1.
3.2.
4.
A
BSTRACTION PROCEDURALE
......................................................................................... 5
A
CTIVITES ET EXERCICES
................................................................................................ 6
CONCEPTS DE BASE ........................................................................................................ 7
4.1.
E
XPRESSION
L
ISP
............................................................................................................ 7
4.2.
L
A BOUCLE D
'
INTERACTION LECTURE
-
EVALUATION
-
ECRITURE
....................................... 8
4.3. L'
EVALUATION D
'
UN APPEL DE FONCTION
L
ISP
................................................................ 9
4.3.1.
L'évaluation d'un atome ......................................................................................... 9
4.3.2.
L'évaluation d'un appel de fonction ....................................................................... 9
4.3.3.
Règle de l'évaluation d'un appel de fonction........................................................ 10
4.4. L'
OPERATEUR QUOTE BLOQUE L
'
EVALUATION
............................................................... 10
5.
DEFINITION D'UNE FONCTION.................................................................................. 11
5.1.
5.2.
5.3.
E
XEMPLES
..................................................................................................................... 12
V
ARIABLES LEXICALES ET DYNAMIQUES
....................................................................... 13
S
YNTAXES COMPAREES
................................................................................................. 14
6.
7.
8.
9.
L'OPERATEUR D'AFFECTATION............................................................................... 15
TYPES D'OPERATEURS................................................................................................. 16
VARIABLES LOCALES ET GLOBALES ..................................................................... 16
DONNEES, LISTE............................................................................................................. 18
9.1.
9.2.
N
OTES
........................................................................................................................... 21
E
XERCICES
.................................................................................................................... 21
EXPRESSIONS CONDITIONNELLES ET LOGIQUES ......................................... 22
V
ALEURS DE VERITE
,
PREDICATS
............................................................................... 22
O
PERATEURS CONDITIONNELS
................................................................................... 24
E
XPRESSIONS LOGIQUES
............................................................................................ 26
E
XERCICES
................................................................................................................ 27
OPERATEURS D'ITERATION................................................................................... 28
E
XERCICES
................................................................................................................ 31
FONCTIONS D'ENTREE-SORTIE ............................................................................ 32
L
ECTURE
................................................................................................................... 32
E
CRITURE
.................................................................................................................. 32
RECURSION.................................................................................................................. 34
E
XERCICES
................................................................................................................ 35
PARAMETRAGE DES FONCTIONS......................................................................... 35
10.
10.1.
10.2.
10.3.
10.4.
11.
11.1.
12.
12.1.
12.2.
13.
13.1.
14.
Introduction à la programmation en Common Lisp
1. Introduction
Ce document s'adresse autant à des débutants en Common Lisp qu'à des débutants en
programmation; sa lecture ne demande aucun pré-requis. Etant une introduction à la
programmation, seule une petite partie du Common Lisp est présentée, celle utile à
l'apprentissage de quelques principes programmation.
Pourquoi avoir choisi le Common Lisp (CL ou Lisp en bref) pour une introduction à la
programmation? D'un point de vue pédagogique, le Lisp offre un certain nombre
d'avantages. La syntaxe du Lisp est simple et s'apprend très rapidement. Le Lisp est un
langage interactif; ceci veut dire qu'en pratique, lorsqu'on écrit un programme dans un
environnement de programmation Lisp, l'interaction avec la machine est immédiate et
permanente : à tout moment le programmeur peut tester ce qu'il est en train de faire, par
petits morceaux, un peu à la manière de ce qui se passe lors de l'utilisation d'une
calculette
1
. Le Common Lisp est richement doté en terme de structures de donnée et
d'opérateurs prédéfinis. Cette simplicité de la syntaxe et de l'interaction, ainsi que la
richesse du langage, font que l'étudiant peut
se concentrer sur ce qui est vraiment
important, c'est-à-dire la représentation et la résolution des problèmes posés.
Un autre
intérêt du Common Lisp est que c'est un langage multi-paradigmes : il permet la
programmation impérative, la programmation fonctionnelle et la programmation orientée-
objets.
Voir la page WEB
www.algo.be/clr.html
pour plus d'information sur le Common Lisp :
caractéristiques, utilisation professionnelle, environnements de programmation (dont
certains gratuits), ressources et bibliographie (en particulier, le Traité de Programmation en
Common Lisp de Robert Strandh et Irène Durand, également disponible
en ligne).
2. Ordinateur et langage de programmation
Un langage de programmation est un langage que comprend un ordinateur. Il permet de
communiquer des instructions et de l'information (des données) à un ordinateur afin de lui
faire exécuter une tâche particulière. Instructions et données constituent le programme.
En plus d'être un moyen de communication avec un ordinateur, un langage de
programmation possède deux autres fonctions essentielles. Premièrement, c'est un moyen
de communication entre programmeurs (les programmeurs passent une grande partie de
leur temps à lire des programmes). Deuxièmement, un langage de programmation nous
permet de représenter et d'organiser nos idées au sujet des tâches à accomplir par un
ordinateur. Vu sous cet angle, on devine que les langages de programmation diffèrent par
leur pouvoir d'expression
2
, c'est-à-dire par la facilité avec laquelle ils permettent de
programmer une solution à un problème donné. Le Lisp est un langage dont le pouvoir
d'expression est très grand, ce qui procure un avantage technologique à ses utilisateurs
3
.
1
Le Common Lisp est un langage
interactif
permettant une compilation
incrémentale
des
composants d'un programme
2
On parle aussi du niveau d'un langage
3
Une affirmation difficile à démontrer rapidement : même si vous allez trouver quelques
arguments dans ce sens tout au long de cette introduction au Common Lisp, il vous faudra
Algorithme
www.algo.be
3/36
Introduction à la programmation en Common Lisp
3. Premier contact, premier programme
Supposons que vous soyez devant un ordinateur et qu'un environnement de programmation
Lisp ait été lancé. Vous avez devant les yeux la fenêtre de
l'interacteur Lisp
qui attend
que vous introduisiez quelque chose et est prêt à vous répondre. Le fait que l'interacteur
Lisp attend est matérialisé par une
invite
(prompt en anglais), par exemple le signe > qui
sera utilisé dans la suite de ce cours. Introduisez à l'aide du clavier l'expression
Lisp
suivante :
(+ 2 3).
La réponse s'inscrit immédiatement à l'écran :
5.
C'est le résultat de
l'évaluation (calcul) de cette expression. Dans la suite, ce type d'interaction sera représenté
comme ceci :
> (+ 2 3)
5
On peut utiliser le Lisp
4
comme une calculette et calculer interactivement toute sorte
d'expressions numériques, y compris des expressions imbriquées :
> (+ 1 3 5)
9
> 9
9
> (* 3 3)
9
> (+ (* 3 3) 3)
12
> (- 10 5 4)
1
> (/ 4 5)
4/5
> (/ 4 5.0)
0.8
> (/ (* 2/3 15) 2)
5
> (expt 2 4)
16
> (round 33.45)
33
0.45
lire quelques uns des documents et livres cités dans la page
http://www.algo.be/clr.html
pour vous convaincre de sa véracité.
4
Dans le suite, le mot
Lisp
sera aussi utilisé comme abréviation de l'interacteur Lisp
Algorithme
www.algo.be
4/36
Introduction à la programmation en Common Lisp
> (round 33.6)
34
-0.4
Ces exemples simples illustrent déjà quelques concepts de programmation en CL :
•
dans ces interactions avec l'interacteur Lisp, on a utilisé des
fonctions
Lisp
existantes
5
, comme la fonction +, dans des expressions Lisp comme
(+ 1 3 5).
On
remarque :
- une expression Lisp comme
(+ 1 3 5)
commence et fini par une parenthèse, c'est-
à-dire est une
liste
(list);
- l'opérateur (la fonction +) précède les arguments que sont 1, 3 et 5 : le Lisp utilise
la notation
préfixe.
Il n'y a pas d'ambiguïté dans les expressions numériques en CL. Comparez (* 2 (+ 3
4)) avec l'expression infixe
6
2 * 3 + 4
Autre intérêt de la notation préfixe : le nombre d'arguments d'un opérateur qui peut
être 0, 1 ou plus.
Quelques uns des
types de donnée
7
numériques prédéfinis en Lisp : nombre entier
(integer
–
en Common Lisp, ce type est sans limite de grandeur
8
), rationnel (ratio)
9
et réel avec point décimal
10
(float)
Le type de donnée symbole (symbol), utilisé ici pour nommer les opérateurs; par
exemple les symboles +, * et
round.
Un nombre est un objet auto-évaluant.
L'évaluation d'une expression Lisp peut donner lieu à plusieurs valeurs, comme
celle de
(round 33.45)
qui donne le nombre entier le plus proche de 33.45 et le
reste.
•
•
•
•
•
3.1. Abstraction procédurale
Pour convertir un montant en FB (franc belge) en €, il suffit de le diviser par 40.3399; par
exemple, pour convertir 50 FB :
5
6
ou primitives du langage
l'opérateur est placé entre les arguments
7
Tout langage de programmation comporte un certain nombre de types de donnée
prédéfinis. Ces types permettent de représenter et manipuler les données dans un
programme.
8
Dans la plupart des langages, l'entier le plus grand est limité par le nombre de bits dans un
mot (une place) de la mémoire de la machine; par exemple le mot de 32 bits sur un
Pentium, soit un entier positif le plus grand égal à (- (expt 2 32) 1)), ce qui fait 4294967295
(à supposer qu'aucun bit ne soit utilisé pour le signe ou autre chose). Dans un langage
comme le C ou Java, l'addition ou la multiplication de 2 nombres entiers qui sont dans
l'intervalle autorisé peut donner une erreur si le résultat est hors de l'intervalle autorisé. Ce
ne sera pas le cas en Common Lisp où il n'y a pas de limite sur la taille des entiers.
9
rapport entre deux nombres entiers, un type de donnée rarement disponible dans les
langages de programmation. Comparez du point de vue de la précision de la représentation
en mémoire : 1/3 et 0.33333334
10
ou encore nombre décimal, flottant et nombre à virgule
Algorithme
www.algo.be
5/36
Plik z chomika:
musli_com
Inne pliki z tego folderu:
3-Cours DEUG(1).pdf
(181 KB)
5-Cours DEUG(2).pdf
(170 KB)
6-Cours DEUG(1).pdf
(59 KB)
7-Cours DEUG(1).pdf
(185 KB)
Algorithmes et programmation en Pascal(2).pdf
(254 KB)
Inne foldery tego chomika:
CloudStack
distribution
dsp
electronics
LPI
Zgłoś jeśli
naruszono regulamin