相关疑难解决方法(0)

使用无值的默认值区分和可选参数

根据功能上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)

common-lisp default-value optional-parameters

7
推荐指数
1
解决办法
1683
查看次数