Symboles

Un symbole Common Lisp correspond à un identificateur dans d'autres langages. La principale différence entre la représentation externe des identificateurs et celle des symboles Common Lisp est que Common Lisp autorise l'utilisation de davantage de caractères. En première approximation, on peut dire que n'importe quelle suite de lettres, chiffres, caractères +, -, *, /, $<$, $>$, =, ^ qui n'est pas interprétable comme un nombre est traduite par read en un symbole. De plus, d'autres caractères comme (, ), espace, etc peuvent y figurer, à condition d'être précédés par anti-slash. De plus, il est possible de construire un symbole avec n'importe quelle suite de caractères, à condition de l'entourer de caractères $\Vert$.

Pour la fonction eval, un symbole est une variable (comme dans d'autres langages) et son évaluation consiste à rechercher sa valeur courante. Common Lisp contient un grand nombre de variables prédéfinies, dont la valeur détermine le fonctionnement du système, comme par exemple la variable *read-base* illustrée plus loin. Par convention, les variables globales Common Lisp sont entourées d'astérisques, ce n'est toutefois pas une obligation.

Pour définir une variable, on utilise soit la macro defparameter, soit la macro defvar. La différence entre les deux est que defparameter réinitialise la variable si elle existe déjà, alors que defvar l'initialise uniquement si elle n'est pas déjà initialisée. Nous allons utiliser plutôt defparameter pour être sûr que la valeur soit toujours affectée. Exemples :

* *read-base*

10
* (defparameter a>b "peut-etre")

A>B
* a>b

"peut-etre"
* (defparameter 2^4 16)

|2^4|
* 2^4

16
*
* (defparameter $\backslash$($\backslash$ bonjour 4)

|( BONJOUR|
* |( BONJOUR|

4
*

Remarques : La valeur de l'expression (defparameter sym val) est le symbole sym. Les lettres minuscules sont automatiquement traduites en majuscules par read (sauf si elles sont précédées pas anti-slash ou entourées de $\Vert$). Dans cette implémentation, un symbole contenant ^ est toujours affiché (par print) entouré de $\Vert$.

Deux symboles nil et t sont prédéfinis en Common Lisp. Ils sont spéciaux, car chacun est sa propre valeur, c'est-à-dire que la valeur de la variable nil est le symbole nil et la valeur de la variable t est le symbole t. En fait, nil représente aussi la valeur booléenne faux et t, la valeur booléenne vrai.

Les symboles Common Lisp jouent plusieurs rôles, en plus de celui de variable. En particulier, ils peuvent être le nom d'une fonction, d'une macro ou d'un opérateur spécial. De plus, ils peuvent être utilisés comme des objets normaux, comme les entiers, les chaînes de caractères, ou les valeurs booléennes.

Irene DURAND
2011-10-14