Paramètres facultatifs
Après les paramètres requis, on aura éventuellement des
paramètres facultatifs (en Anglais : optional parameters). Le début des
paramètres facultatifs (et donc la fin des paramètres requis) est
signalé par le symbole
&optional. Exemple :
* (defun f (a b &optional c d)
(list a b c d))
F
* (f 1 2)
(1 2 NIL NIL)
* (f 1 2 3)
(1 2 3 NIL)
* (f 1 2 3 4)
(1 2 3 4)
*
Chaque paramètre facultatif peut être indiqué de trois manières
différentes. Dans l'exemple ci-dessus, il est indiqué par un symbole
simple. Dans ce cas, la valeur par défaut (si l'argument
correspondant n'est pas fourni) est nil.
Il est possible de préciser une valeur par défaut pour un paramètre
facultatif. On remplace le symbole simple par une liste de
deux éléments, la variable et l'expression à évaluer si le paramètre
n'est pas fourni. L'expression sera évaluée à chaque fois que le
paramètre n'est pas fourni. Exemple :
* (defparameter *l* (list 9 8 7 6 5 4 3 2 1))
*L*
* (defun f (a b &optional c (d (pop *l*)))
(list a b c d))
F
* (f 1 2 3 4)
(1 2 3 4)
* (f 1 2 3)
(1 2 3 9)
* (f 1 2 3)
(1 2 3 8)
* (f 1 2)
(1 2 NIL 7)
* (f 1 2)
(1 2 NIL 6)
*
Irene DURAND
2011-10-14