Distinguir y argumento opcional con valor predeterminado de ningún valor

De acuerdo aLas funciones en GigaMonkeys, Common Lisp admite parámetros posicionales opcionales a través de&optional y el valor predeterminado se puede establecer de forma arbitraria.

El valor predeterminado predeterminado esnil.

(defun function (mandatory-argument &optional optional-argument) ... )

y el valor predeterminado se puede establecer arbitrariamente

(defun function (mandatory-argument &optional (optional-argument "")) ....)

¿Hay alguna manera de distinguir los casos en los que el parámetro opcional tiene el valor predeterminado pasado explícitamente frente a ningún valor?

EDITAR: evidentemente la página que enlacé explica esto.

Ocasionalmente, es útil saber si el valor de un argumento opcional fue proporcionado por la persona que llama o si es el valor predeterminado. En lugar de escribir código para verificar si el valor del parámetro es el predeterminado (que no funciona de todos modos, si la persona que llama pasa explícitamente el valor predeterminado), puede agregar otro nombre de variable al especificador del parámetro después del valor predeterminado expresión. Esta variable estará vinculada a verdadero si la persona que llama realmente proporcionó un argumento para este parámetro y NIL de lo contrario. Por convención, estas variables generalmente se denominan igual que el parámetro real con un "-supplied-p" al final. Por ejemplo:

(defun foo (a b &optional (c 3 c-supplied-p)) 
    (list a b c c-supplied-p))

Respuestas a la pregunta(1)

Su respuesta a la pregunta