Lisp (Common Lisp)/Premier programme
Le Common Lisp est un langage préfixé, c'est-à-dire que l'équivalent en C de
int mon_addition(int a, int b) {
return a + b;
}
int main(int argc, char *argv[]) {
printf("%d", mon_addition(2, 3));
return EXIT_SUCCESS;
}
sera en Lisp:
(defun mon-addition (a b)
(+ a b))
Nous observons:
- pour déclarer une fonction nommée, nous utilisons "defun" suivi du nom de notre fonction.
- nous déclarons les arguments entre 2 parenthèses, soit (a b), sans indications de type qui sont optionnelles.
- nous écrivons le corps de notre fonction à la suite, sans caractères "{" ou "}",
- et sans écrire de "return". La valeur de retour est implicite, la dernière expression évaluée sera retournée.
Par ailleurs, nous n'avons que définit la fonction "mon-addition". Quid de la fonction "main" du C?
Il n'y a pas de fonction "main" par défaut en Lisp, libre à nous d'appeler la fonction que nous souhaitons.
Tout d'abord, nous pouvons utiliser la puissante invite de commande, très interactive, qui nous permet d'interagir avec le programme à la volée. Par exemple, nous pouvons appeler la fonction définie précédemment dans son fichier source:
CL-USER> (mon-addition 2 3)
;; => 5
Nous pouvons aussi lancer ce programme depuis les sources, en l'appelant depuis une invite de commande Unix, depuis un terminal. Si vous avez écrit la fonction d'addition dans un fichier appelé "addition.lisp", et que vous avez installé l'implémentation SBCL, vous pouvez compiler et lancer le programme contenu dans le fichier avec:
$ sbcl --load addition.lisp
This is SBCL 2.5.8, an implementation of ANSI Common Lisp.
*
Vous remarquez que rien ne semble se passer. Pourtant, votre fichier source a été lu et compilé. Mais rien n'a été exécuté, car vous n'aviez pas d'expression qui produise un effet de bord, vous aviez seulement créé une fonction. Par contre, regardez le signe "*": vous avez obtenu de nouveau le "REPL" de Lisp. D'ici, vous pouvez interagir avec le programme. La fonction "mon-addition" est disponible et vous pouvez l'appeler.
Pour quitter cette invite de commande, utilisez Control-D ou tapez "(quit)".
Vous pouvez compléter le fichier addition.lisp avec des instructions:
(defun mon-addition (a b)
(+ a b))
;; top-level:
;; sera exécuté par sbcl --load
(format t "Le résultat de 2 + 3 est: ~a" (mon-addition 2 3))
(quit)
Maintenant, la commande "sbcl --load addition.lisp" compilera votre fonction, et vous obtiendrez un effet de bord (ligne 6, "format" va écrire sur la sortie standard), et vous venez d'écrire et de lancer votre premier programme Lisp, félicitations.

