什么是&rest
意味着这个:(append &rest sequences)
elisp中的&rest是什么意思?
我已经读完这本书“elisp_intro”,但我没有找到答案。如果你能帮助我,我将非常感激。
什么是&rest
意味着这个:(append &rest sequences)
elisp中的&rest是什么意思?
我已经读完这本书“elisp_intro”,但我没有找到答案。如果你能帮助我,我将非常感激。
它表明以下参数是“休息”参数。在你的例子中,sequences
是其余的参数。
与普通参数不同,其余参数将消耗用户提供的任何参数的“休息”。这是一种接受可变数量参数的函数的方法。在函数体内部,参数将是一个包含所有额外参数的列表。
所以,如果你有一个看起来像(add &rest numbers)
的功能,那么你可以这样调用它(add 1 2 3 4 5)
,并且在函数内部numbers
参数将具有值(1 2 3 4 5)
。
或者例如,((lambda (a &rest r) r) 1 2 3) ;=> (2 3)
以下在函数定义的&其余符号的任何参数将被收集到一个单一的列表对象。所以在(附加&其余序列),如果调用函数时:
(append 1)
变量序列将是列表(1)在函数体。如果将其称为
(append 1 2 3)
变量序列将是函数体中的列表(1 2 3)。这在Elisp参考手册argument list node中有解释。
(info "(elisp)Argument List")
的elisp/Common Lisp的&rest
类似于在Python
的*args
参数如果你把这个在您的Common Lisp REPL和调用foo具有不同的参数号码,你会看到相当快的了。
(defun foo (a b &rest trailing)
(format t "~a :: ~a :: ~a~%" a b trailing))
谢谢你,你的回答很明确。 – 2011-02-12 02:22:58