Le langage Emacs-Lisp
C'est un langage fonctionnel : la
fonction est l'élément de base.
Construire un programme c'est définir une fonction.
La fonction est une donnée manipulable par un programme.
Les principaux types de données
- les nombres entiers : 12, -35
- les chaînes de caractères : "un exemple"
- les symboles : numerote, while, *,
n
- les listes : (1 2 3), ("bonjour" a "vous" 2), (*
n 2), (quote (* n 2)), ()
Dans les tests, la liste vide
() est interprétée comme
faux. Toute autre valeur de quelque type que ce soit est
interprétée comme
vrai.
Emacs-Lisp manipule d'autres types de données comme les nombres flottants et
les vecteurs, mais aussi des types de données plus spécialisés comme les
buffers, les marques, les tables de clés, etc ...
Les expressions
Les expressions utilisent des constantes, des variables (représentées par des
symboles), des fonctions (représentées par des symboles), des parenthèses et
des espaces. L'appel d'une fonction s'écrit comme une liste dont le premier
élément est le symbole de la fonction et les éléments suivants ses arguments effectifs.
L'écriture
'expression
est une forme abrégée
de
(quote expression)
. Le
caractère "
;
" introduit un commentaire.
Le symbole
nil
a une valeur prédéfinie : la liste
vide
(). Le symbole
t
a une valeur prédéfinie
: le symbole
t
; cette valeur est souvent utilisée comme
vrai.
Les fonctions essentielles
(let (symb1 ... symbP) expr1 expr2
... exprN)
: évalue expr1, expr2,
..., exprN en y considérant symb1, ...,
symbP comme des variables locales. À chaque symbole de la liste en 1er
paramètre de let, on peut donner une valeur initiale en mettant
(symb expr)
en lieu et place de
symb tout court. La valeur du let est celle de
exprN.
(if cond expr1 expr2
... exprN)
: évalue cond puis
si cond a une valeur différente de () alors
évalue expr1, sinon évalue expr2, ...,
exprN.
La valeur du if est celle de expr1 ou celle
de exprN, suivant les cas.
(while cond expr1 expr2
... exprN)
: évalue cond et tant que la valeur de cond
diffère de (), les expressions expr1, expr2,
..., exprN et cond sont réévaluées. La valeur
finale du while est toujours ().