A la suite des paramètres facultatifs peut figurer un unique paramètre reste (en Anglais : rest parameter) lequel est signalé par le symbole &rest suivi d'un symbole qui indique le nom de la variable.
Si un paramètre reste est présent, la fonction accepte un nombre d'arguments supérieur ou égal au nombre de paramètres requis et facultatifs. Les argument supplémentaires sont alors disponibles dans une liste comme valeur de la variable reste. Exemple :
* (defparameter *l* (list 9 8 7 6 5 4 3 2 1))
*L*
* (defun f (a b &optional c (d (pop *l*)) &rest e)
(list a b c d e))
F
* (f 1 2 3)
(1 2 3 9 NIL)
* (f 1 2 3 4 5)
(1 2 3 4 (5))
* (f 1 2 3 4 5 6 7 8 9)
(1 2 3 4 (5 6 7 8 9))
*
Avec ce système, on ne peut pas détecter si la valeur du paramètre vient d'un passage explicite ou d'une évaluation de l'expression pour déterminer une valeur par défaut. Pour cela, il est possible de rajouter un paramètre supplémentaire dont la valeur sera vrai si et seulement si l'argument correspondant a été fourni. Exemple :
* (defun f (x &optional (y 25 y-supplied-p))
(list x y y-supplied-p))
F
* (f 1)
(1 25 NIL)
* (f 1 25)
(1 25 T)
*