Lisp

Infos
Lisp est la plus ancienne famille de langages impératifs et fonctionnels. Développé initialement en tant que modèle pratique pour représenter des programmes (par contraste avec la notion théorique de Machine de Turing), il est devenu dans les années 70 et 80 le langage de choix pour la recherche en intelligence artificielle. Les langages Lisp sont aujourd'hui utilisés dans de nombreux domaines, de la programmation Web à la finance, et dans les cursus de formatio
Lisp

Lisp est la plus ancienne famille de langages impératifs et fonctionnels. Développé initialement en tant que modèle pratique pour représenter des programmes (par contraste avec la notion théorique de Machine de Turing), il est devenu dans les années 70 et 80 le langage de choix pour la recherche en intelligence artificielle. Les langages Lisp sont aujourd'hui utilisés dans de nombreux domaines, de la programmation Web à la finance, et dans les cursus de formation en Informatique. Le terme Lisp a été forgé à partir de l'anglais « list processing ». Tous les dialectes de Lisp partagent les mêmes opérateurs de manipulation de listes chaînées simples. Lisp se distingue en outre par une syntaxe simple en notation préfixée, son typage dynamique des données, le support pour la programmation fonctionnelle, sa gestion automatique de la mémoire et la faculté de manipuler le code source en tant que structure de données. Les langages Lisp sont reconnaissables immédiatement à leur apparence. Le code source des programmes est écrit en utilisant la même syntaxe que celle des listes - la syntaxe parenthésée des s-expressions. Chaque sous-expression d'un programme (ou structure de données) est délimitée par des parenthèses. Cela simplifie grandement l'analyse syntaxique des programmes Lisp et rend simple la métaprogrammation -- la création de programmes qui créent d'autres programmes. 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 (juste après 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.

Histoire

Le langage Lisp fut inventé par John McCarthy en 1958 alors qu'il était au Massachusetts Institute of Technology (MIT). 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 :
- car (Contents of Address register) : le premier élément de la liste
- cdr (Contents of Decrement register) : le reste de la liste Dans son article, John McCarthy introduit deux syntaxes : les S-expressions (expressions symboliques, parfois appelées « sexp ») et les M-expressions (méta-expressions permettant l´homoiconicité 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. Cette profusion de parenthèses a fait surnommer LISP : Lots of Insipid and Stupid Parentheses (des tas de parenthèses insipides et stupides ou, en français Langage Imbécile Saturé de Parenthèses). 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. Bien qu'éclipsé par des langages proches de la machine (C, C++) ou supportés par des campagnes marketing agressives, Lisp reste un langage très utilisé, en particulier en tant que langage embarqué dans des applications, où il sert de langage d'extension. Le cas le plus connu d'utilisation embarquée de Lisp est l'éditeur de textes Emacs. On notera par ailleurs que Lisp vient en quatrième position en termes de lignes de codes utilisées pour implémenter les 8 600 paquets sources disponibles dans le système d'exploitation Debian publié en juin 2005. Les huit premiers langages se distribuent ainsi : C (57%), C++ (16.8%), Shell (9%), LISP (3%), Perl (2.8%), Python (1.8%), Java (1.6%), FORTRAN (1.2%).

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. Cette utilisation des parenthèses donne lieu à des moqueries sur le nom de LISP : « Lots of Irritating and Silly Parentheses », ou «Lots of Stupid and Insipid Parentheses » (que l'on pourrait traduire respectivement par : « Langage inutilement et stupidement parenthésé » et «Des tas de parenthèses stupides et insipides »). 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 un ensemble 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 (
Sujets connexes
Analyse syntaxique   Années 1960   Années 1970   Années 1980   Années 1990   AutoCAD   Code source   Common Lisp   Debian   Emacs   Emacs Lisp   Finance   Fortran   Homoiconicité   Héritage multiple   Intelligence artificielle   Interprète (informatique)   John McCarthy   Machine Lisp   Machine de Turing   Macintosh   Massachusetts Institute of Technology   Métaprogrammation   Notation préfixée   Programmation fonctionnelle   Programmation impérative   Récursion terminale   S-expression   Scheme   Typage dynamique   World Wide Web   XLispStat  
#
Accident de Beaune   Amélie Mauresmo   Anisocytose   C3H6O   CA Paris   Carole Richert   Catherinettes   Chaleur massique   Championnat de Tunisie de football D2   Classement mondial des entreprises leader par secteur   Col du Bonhomme (Vosges)   De viris illustribus (Lhomond)   Dolcett   EGP  
^