3

Common Lisp 中有没有一种方法可以创建一个泛型函数,其中要专门研究的参数是关键字参数?

例如,而不是这个:

CL-USER> (defgeneric tst (a))
#<STANDARD-GENERIC-FUNCTION TST (0)>
CL-USER> (defmethod tst ((a list)) 
           (print a))
#<STANDARD-METHOD TST (LIST) {1004ECC903}>

..它在参数'a'上指定。我想要以下内容:

CL-USER> (defgeneric tst (&key a))
#<STANDARD-GENERIC-FUNCTION TST (0)>
CL-USER> (defmethod tst (&key (a list)) 
           (print a))
#<STANDARD-METHOD TST (LIST) {1004ECC903}>

显然,这与设置关键字参数的默认值的语法冲突,所以我有点卡住了。在实际代码中,这个问题与我选择了不同的参数布局有关,所以这不是问题(而且启动起来有点整洁!)但如果我再次遇到这个问题,我想我最好问问专家!

祝大家欢呼

4

2 回答 2

6

不,这不是 Common Lisp 提供的。

于 2012-10-04T17:29:01.083 回答
1

不直接支持它,但您可以通过分派到通用函数来实现相同的效果。

(defgeneric foo-impl (bar baz))

(defun foo (&key bar baz)
  (foo-impl bar baz))
于 2012-10-06T18:12:32.080 回答