Lisp - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

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

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 Insipid and Stupid 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 langages (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 (dite, en arithmétique, notation polonaise) 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.

Syntaxe en notation EBNF

Le langage LISP dispose d'une syntaxe très simple et élégante, utilisant un minimum de concepts. Cette économie de concepts mène Gregory Chaitin à qualifier cette syntaxe de « joyau de splendeur mathématique et de beauté intellectuelle austère ».

Le cœur et l'essentiel du langage LISP est défini par seulement trois règles EBNF :

      expression -> atom | list      atom -> number | name | string | operator      list -> '(' expression* ')'      

Ces règles peuvent se traduire de la manière suivante en français : un programme LISP est une liste d'expressions, chacune d'entre elles pouvant être une liste (récursion) ou un atome.

Citation

Gregory Chaitin sur Lisp :

«Malheureusement, alors que les langages de programmation gagnent en sophistication, ils sont de plus en plus le reflet de la complexité de la société humaine et du monde immense des applications logicielles. Ainsi, ils deviennent d'énormes boîtes à outils, comme des garages et des greniers chargés de plus de trente ans d'histoire ! A contrario, LISP est un langage de programmation d'une grande beauté mathématique ; il ressemble plus à un scalpel de chirurgien ou à un diamant affûté qu'à un garage à deux places encombrés de bricolages, où il ne reste plus de place pour une voiture.

LISP a un petit nombre de concepts élémentaires puissants, et tout le reste est construit au-dessus de ça, ce qui correspond à la façon de travailler des mathématiciens ; c'est à ça que ressemblent les théories mathématiques. Ces théories, les bonnes théories, consistent à définir quelques nouveaux concepts clefs, et à partir de là le feu d'artifice commence : elles révèlent de nouvelles allées, elles ouvrent la porte à des mondes radicalement nouveaux. LISP est comme ça aussi ; il est plus proche des maths que la plupart des langages de programmation. Du moins si vous éliminez les parties utiles qui ont été ajoutées, les ajouts qui ont fait de LISP un outil pratique. Ce qui reste si vous faites cela, c'est le LISP original, le cœur conceptuel de LISP, un cœur qui est un joyau de beauté mathématique et de beauté intellectuelle austère.»

Aujourd'hui, certains diraient que Scheme est le dérivé de Lisp atteignant à la beauté décrite par Chaitin ; et il est certain que Common Lisp, le descendant en ligne droite des grandes cuvées des dialectes passés de LISP (Maclisp, Interlisp, Zetalisp) penche plus du côté de la boîte à outils géante, bien qu'ayant conservé intact son cœur conceptuel.

G. Chaitin a utilisé ce Lisp idéalisé pour ses recherches : Elegant LISP Programs.

Page générée en 0.080 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise