为什么在 Common Lisp 中需要偶数个关键字参数?
Why need even number of keyword parameters in Common Lisp?
我正在尝试在 Common Lisp 中实现尾调用递归阶乘,尝试一下并体验一下。
我复制了一些代码并用 Common Lisp 重写了它,如下所示:
(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.
尝试 运行 时,出现错误:
SIMPLE-PROGRAM-ERROR:
odd number of &KEY arguments
为什么我不能有奇数个关键字参数?这有什么问题,我该怎么办?
例如在Python中我可以写:
def func(a, b=10):
print([a, b])
所以我会有一个奇数个关键字参数。没有问题。
错误不是指关键字参数的个数;相反,它意味着您调用函数时使用的参数数量。由于定义的关键字参数需要成对出现 (:KEYWORD VALUE
),因此参数数量为奇数意味着您一定遗漏了一些东西。
在这种情况下,您缺少
中的关键字
(tailrecsum (- x 1) (+ running-total x))
应该是
(tailrecsum (- x 1) :running-total (+ running-total x))
我正在尝试在 Common Lisp 中实现尾调用递归阶乘,尝试一下并体验一下。
我复制了一些代码并用 Common Lisp 重写了它,如下所示:
(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.
尝试 运行 时,出现错误:
SIMPLE-PROGRAM-ERROR:
odd number of &KEY arguments
为什么我不能有奇数个关键字参数?这有什么问题,我该怎么办?
例如在Python中我可以写:
def func(a, b=10):
print([a, b])
所以我会有一个奇数个关键字参数。没有问题。
错误不是指关键字参数的个数;相反,它意味着您调用函数时使用的参数数量。由于定义的关键字参数需要成对出现 (:KEYWORD VALUE
),因此参数数量为奇数意味着您一定遗漏了一些东西。
在这种情况下,您缺少
中的关键字(tailrecsum (- x 1) (+ running-total x))
应该是
(tailrecsum (- x 1) :running-total (+ running-total x))