根据功能上GigaMonkeys,Common Lisp中通过支持可选的位置参数&optional和默认值可任意设定.
默认默认值为nil.
(defun function (mandatory-argument &optional optional-argument) ... )
Run Code Online (Sandbox Code Playgroud)
并且可以任意设置默认值
(defun function (mandatory-argument &optional (optional-argument "")) ....)
Run Code Online (Sandbox Code Playgroud)
有没有办法区分可选参数显式传递的默认值vs根本没有值的情况?
编辑:显然我链接的页面解释了这一点.
有时,了解可调参数的值是由调用者提供还是默认值很有用.而不是编写代码来检查参数的值是否是默认值(无论如何,如果调用者恰好传递默认值),您可以在默认值之后向参数说明符添加另一个变量名称表达.如果调用者实际为此参数提供了参数,则此变量将绑定为true,否则为NIL.按照惯例,这些变量通常被命名为与实际参数相同,末尾带有"-supplied-p".例如:
(defun foo (a b &optional (c 3 c-supplied-p))
(list a b c c-supplied-p))
Run Code Online (Sandbox Code Playgroud)