Page d'accueil encyclopedie-enligne.com en page d'accueil
Liste Articles: [0-A] [A-C] [C-F] [F-J] [J-M] [M-P] [P-S] [S-Z] | Liste Catégories | Une page au hasard | Pages liées

Lisp



image:Langage_progr.png
Cet article fait partie de
la série Langages de programmation
Langages orientés objet
Ada 95 - C++ - C#
Common lisp object system
Delphi - Eiffel - Java - Nice
Langages impératifs
APL - ASP
Assembleur
BASIC - C - Pascal
Perl - PHP - Python
Langages fonctionnels
ML/OCaml - Lisp/Common Lisp
Forth - Logo - Scheme
Langages déclaratifs
Clips - Prolog
Voir aussi
Conception - Codage
Tests - Optimisations

Le Lisp (terme forgé à partir de l'anglais « list processing ») est l'un des premiers langages de programmation. Il se distingue par une syntaxe simple en notation préfixée, son typage dynamique des données, sa gestion automatique de la mémoire et sa réflexivité.

Si l'on excepte le langage machine et le langage d'assemblage (ou plus communément « assembleur »), Lisp est le deuxième langage le plus ancien (après Plankalküll de Konrad Zuse, et juste avant Fortran) parmi les langages qui se sont largement diffusés. Lisp a beaucoup évolué depuis le début des années 1960 et a ainsi donné naissance à de nombreux dialectes.

Une propriété notable de Lisp est sa réflexivité. En effet, les programmes Lisp sont eux-même écrits sous la formes de données manipulables en Lisp (des listes). Il est donc facile d'écrire des programmes Lisp produisant et manipulant d'autres programmes Lisp. Nombre de dialectes de Lisp mettent à profit cette fonctionnalité dans le cadre de systèmes de macro permettant aux programmeurs d'étendre la syntaxe du langage avec une grande souplesse.

Le langage Lisp fut inventé par John McCarthy en 1958 alors qu'il était au Massachusetts Institute of Technology. Il publia un article intitulé « Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I » (soit « Fonctions Récursives d'expressions symboliques et leur évaluation par une Machine, partie I ») dans la revue CACM en 1960 ; la partie II ne fut jamais publiée.

Le premier interpréteur fonctionnait sur un ordinateur IBM 704 et deux instructions de cette machine devinrent les deux opérations primitives de Lisp pour décomposer les listes :

Dans son article, John McCarthy introduit deux syntaxes: les S-expressions (expressions symboliques, parfois appelées « sexp ») et les M-expressions (meta expressions, pour exprimer les fonctions manipulant des S-expressions). Les M-expressions n'ont jamais été très appréciées et la plupart des Lisps de nos jours utilisent des S-expressions pour les programmes comme pour les données. C'est la syntaxe des S-expressions qui fait que certains reprochent à Lisp d'être « plein de parenthèses », mais c'est aussi une des sources de la puissance et de la souplesse du langage.

Probablement en raison de son expressivité et de sa flexibilité, Lisp eut beaucoup de succès dans la communauté de l'intelligence artificielle. Dans les années 1970, on créa des ordinateurs spécialisés dans l'exécution de programmes Lisp : les machines Lisp.

Durant les années 1980 et 1990, on fit de grands efforts pour unifier les nombreux dialectes de Lisp qui étaient apparus. Le résultat fut appelé Common Lisp et en 1994, l'ANSI publia « ANSI X3.226-1994 Information Technology Programming Language Common Lisp », standardisant ainsi le langage. À ce moment, Lisp était bien moins florissant qu'à sa grande époque.

Sommaire

1 Liens externes

Syntaxe

Les listes sont délimitées par des parenthèses et leurs éléments sont séparés par des espaces : (1 2 « foo »). Un programme Lisp est un arbre de syntaxe composé avec des listes, ce qui n'est pas le cas des données (contrairement à des rumeurs persistantes). Cette utilisation des parenthèses donne lieu à une moquerie sur le nom de LISP : « Lots of Irritating and Superfluous Parentheses ».

Lisp est un langage orienté expression : il ne fait pas de distinction entre « expressions » et « statements » (instructions) comme le font de nombreux langage (par exemple Pascal) ; tout est expression et retourne une valeur ou une liste de valeurs.

La plupart des expressions Lisp sont des applications de fonction.

Ce que d'autres langages écrivent

 f(a,b,c) 

Lisp l'écrit

 (f a b c) 

Ainsi une somme ne se note pas

 1+2+3+4 

ni

somme(1,2,3,4)

mais

(+ 1 2 3 4)

On utilise la même notation préfixée pour les « formes spéciales » et les « macros » : le premier élément dans la liste, dans ces cas, détermine comment les éléments suivants seront traités. Une expression peut être une application de fonction, une forme spéciale ou une application de macro suivant la nature du premier élément.

Exemples

Les programmes suivants ne sont pas typiques des vrais programmes Lisp. Ils sont typiques de la présentation que l'on fait de Lisp dans les cours d'informatique.

La factorielle est un grand classique :

(defun factorial (n)
 « Calcule la factorielle de l'entier n. »
 (if (<= n 1)
 1
 (* n (factorial (- n 1)))))

On peut aussi écrire plus efficacement (voir récursion terminale) :

(defun factorial (n &optional (acc 1))
 « Compute the factorial of the integer n. »
 (if (<= n 1)
 acc
 (factorial (- n 1) (* acc n))))

Un autre exemple typique est cette fonction qui renverse une liste (notez bien que Lisp a une fonction intégrée reverse à cet effet) :

(defun reverse (l &optional (acc '()))
 « renverse la liste l »
 (if (null l)
 acc
 (reverse (cdr l) (cons (car l) acc))))

Lisp et les Objets

Divers systèmes à objets ont été construits à partir de Lisp, notamment :

CLOS offre de l'héritage multiple, du « multiple dispatch » (« multi-méthodes ») et un puissant système de combinaison de méthodes. Common Lisp (dont CLOS fait partie) fut le premier langage orienté-objet standardisé.

Généalogie et Variantes

le texte ci-dessus est une traduction libre de l'article LISP_programming_language sur wikipedia.com.

Liens externes



This site support the Wikimedia Foundation. This Article originally from Wikipedia. All text is available under the terms of the GNU Free Documentation License Page HistoryOriginal ArticleWikipedia