我正在尝试在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
所以我会得到一个奇数,一个关键字参数。那里没有问题。
答案 0 :(得分:3)
错误不是指关键字参数的数量;相反,它表示您调用函数的参数数量。由于关键字参数按定义需要成对(:KEYWORD VALUE
),因此具有奇数个参数意味着您必须遗漏某些内容。
在这种情况下,你错过了
中的关键字(tailrecsum (- x 1) (+ running-total x))
应该是
(tailrecsum (- x 1) :running-total (+ running-total x))