Signaler une condition

Plusieurs fonctions Common Lisp existent pour signaler une condition. Ces fonctions prennent comme argument un désignateur de condition. Ce désignateur peut être :

Dans le cas d'un symbole, des arguments facultatifs supplémentaires donnent des paramètres pour la création de la condition. Dans le cas d'une chaîne de caractères, des arguments facultatifs supplémentaires donnent des valeurs supplémentaires à fournir à format.

La manière la plus primitive de signaler une condition est d'utiliser la fonction signal. Elle renvoie nil si la condition n'est traitée par aucun traitant :

* (defun fact (n)
    (if (zerop n)
        (prog1 1 (signal 'error))
        (* n (fact (1- n)))))

FACT
* (fact 4)

24
* (handler-case (fact 4)
    (condition () "we have a problem"))

"we have a problem"
*

La fonction error est similaire à signal, mais si la condition n'est pas traitée, elle appelle de débogueur :

* (defun fact (n)
    (if (zerop n)
        (prog1 1 (error "something bad happened"))
        (* n (fact (1- n)))))

FACT
* (fact 4)

Error in function FACT:  something bad happened
encore des messages, puis l'invite du débogueur

Irene DURAND
2011-10-14