为什么Common Lisp中需要偶数个关键字参数?

时间:2016-08-15 11:50:26

标签: common-lisp keyword-argument

我正在尝试在Common Lisp中实现尾调用递归因子,尝试它并体验它。

我复制了一些代码并在Common Lisp中重写了它,如下所示:

file://

但是,我先收到警告:

(defun tailrecsum (x &key (running-total 0 running-total-p))
    (if (= x 0)
        (if running-total-p running-total 0)
        (tailrecsum (- x 1) (+ running-total x))))

尝试运行时,我收到错误:

SIMPLE-WARNING: 
The function has an odd number of arguments in the keyword portion.

为什么我不能有奇数个关键字参数?有什么问题,我能做些什么呢?

例如在Python中我可以写:

SIMPLE-PROGRAM-ERROR: 
odd number of &KEY arguments

所以我会得到一个奇数,一个关键字参数。那里没有问题。

1 个答案:

答案 0 :(得分:3)

错误不是指关键字参数的数量;相反,它表示您调用函数的参数数量。由于关键字参数按定义需要成对(:KEYWORD VALUE),因此具有奇数个参数意味着您必须遗漏某些内容。

在这种情况下,你错过了

中的关键字
(tailrecsum (- x 1) (+ running-total x))

应该是

(tailrecsum (- x 1) :running-total (+ running-total x))