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}>
显然,这与设置的语法冲突 关键字参数的默认值所以我有点卡住了。在实际的代码中,这个问题与我选择了不同的参数布局有关,所以这不是问题(并且引导起来有点整洁!)但是如果我再遇到这个问题,我认为我最好问专家!
干杯全部
答案 0 :(得分:6)
不,这不是Common Lisp提供的。
答案 1 :(得分:1)
不直接支持,但您可以通过调度到通用函数来实现相同的效果。
(defgeneric foo-impl (bar baz))
(defun foo (&key bar baz)
(foo-impl bar baz))