Un paramètre optionnel est désigné par le mot-clé de liste lambda &optional dans une liste lambda. Les paramètres optionnels ne sont pas obligatoires, peuvent avoir une valeur par défaut et peuvent aussi spécifier un paramètre supplied-p, qui vaudra vrai ou faux selon qu'un argument a été fourni ou non pour le paramètre.
(defun optional-parameter (&optional (arg -1)) arg)
(optional-parameter) ; => -1
(optional-parameter 13) ; => 13
Les paramètres optionnels doivent être placés après les paramètres obligatoires, mais avant les paramètres nommés ou restants. Les arguments sont d'abord liés aux paramètres obligatoires, puis aux paramètres optionnels, et enfin aux paramètres restants et nommés.
(defun req-and-opt (req &optional (opt -1)) (list req opt)
(req-and-opt 1) ; => (1 -1)
(req-and-opt 1 13) ; => (1 13)
Bien que l'on puisse combiner plusieurs types de paramètres avec d'autres types de paramètres (paramètres optionnels et paramètres par mot-clé), cela peut poser problème et doit être fait avec prudence. Voir la section « Mixing Different Parameter Types » de Practical Common Lisp.