【发布时间】:2014-09-29 14:58:55
【问题描述】:
我认为,由于 Emacs Lisp 和 Common Lisp 在语法方面似乎密切相关,我可以按照我在 RosettaCode 上找到的示例代码进行操作,但事实证明我错了。
有问题的代码如下所示:
(defun print-name (&key first (last "?"))
(princ last)
(when first
(princ ", ")
(princ first))
(values))
根据 RosettaCode,它应该执行以下操作:
> (print-name)
?
> (print-name :first "John")
?, John
> (print-name :last "Doe")
Doe
> (print-name :first "John" :last "Doe")
Doe, John
现在,事情是这样的;每当我尝试在我的 ELisp 解释器中运行该函数时,我都会收到以下错误:
*** Eval error *** Wrong number of arguments: (lambda (&key first (last "?")) (princ la\
st) (if first (progn (princ ", ") (princ first))) (values)), 0
我对 lisp 的习惯不够了解,不知道这是什么意思,而且没有多少 谷歌搜索 让我更接近答案。
那么在 Emacs Lisp 中这样做的正确方法是什么?
【问题讨论】: