【发布时间】:2016-03-31 21:10:49
【问题描述】:
根据GigaMonkeys上的Functions,Common Lisp通过&optional支持可选的位置参数,默认值可以任意设置。
默认默认值为nil。
(defun function (mandatory-argument &optional optional-argument) ... )
并且默认值可以任意设置
(defun function (mandatory-argument &optional (optional-argument "")) ....)
有没有办法区分可选参数具有显式传入的默认值与根本没有值的情况?
编辑:显然我链接的页面解释了这一点。
有时,知道一个可选的值是否是有用的 参数由调用者提供或者是默认值。相当 而不是编写代码来检查参数的值是否是 默认(无论如何,如果调用者碰巧 显式传递默认值),您可以添加另一个变量名 到默认值表达式之后的参数说明符。这 如果调用者实际提供了一个 此参数的参数,否则为 NIL。按照惯例,这些 变量通常被命名为与实际参数相同的名称 最后是“-supplied-p”。例如:
(defun foo (a b &optional (c 3 c-supplied-p))
(list a b c c-supplied-p))
【问题讨论】:
-
这也适用于关键字参数。例如,见LISP: Keyword parameters, supplied-p。
-
这在您提供的同一个链接中得到了回答!
标签: common-lisp default-value optional-parameters