我想,由于Emacs Lisp和Common Lisp看起来如此紧密相关,所以我可以按照我在RosettaCode上找到的示例代码进行操作,但事实证明我错了。如何在ELisp中创建命名参数?
有问题的代码如下所示:
(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
我不routined足够口齿不清知道什么是应该的意思是,和谷歌搜索有铅无量我更接近答案。
那么在Emacs Lisp中这样做的正确方法是什么?
惯用,你想用'&休息args'和分析'args'为plist中,具有较少语法混乱:'(打印-name:第一个“John”:最后一个“Doe”)'。 – lunaryorn 2014-09-29 15:56:31