Distinguish & optionales Argument mit Standardwert von no value

Gemäß Funktionenei GigaMonkeys unterstützt Common Lisp optionale Positionsparameter über&optional und der Standardwert können beliebig eingestellt werden.

Der Standardwert istnil.

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

und der Standardwert kann beliebig eingestellt werden

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

Gibt es eine Möglichkeit, die Fälle zu unterscheiden, in denen für den optionalen Parameter der Standardwert explizit übergeben wurde, und überhaupt kein Wert?

EDIT: Offensichtlich erklärt die Seite, die ich verlinkt habe, dies.

elegentlich ist es hilfreich zu wissen, ob der Wert eines optionalen Arguments vom Aufrufer bereitgestellt wurde oder der Standardwert ist. Anstatt Code zu schreiben, um zu überprüfen, ob der Wert des Parameters der Standardwert ist (was ohnehin nicht funktioniert, wenn der Aufrufer den Standardwert explizit übergibt), können Sie nach dem Standardwert einen weiteren Variablennamen zum Parameterspezifizierer hinzufügen Ausdruck. Diese Variable ist an true gebunden, wenn der Aufrufer tatsächlich ein Argument für diesen Parameter und ansonsten NIL angegeben hat. Üblicherweise werden diese Variablen mit dem gleichen Namen wie der tatsächliche Parameter bezeichnet, wobei am Ende ein "-supplied-p" steht. Beispielsweise

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage