2011-02-11 31 views

回答

19

它表明以下参数是“休息”参数。在你的例子中,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)

+0

谢谢你,你的回答很明确。 – 2011-02-12 02:22:58

10

以下在函数定义的&其余符号的任何参数将被收集到一个单一的列表对象。所以在(附加&其余序列),如果调用函数时:

(append 1) 

变量序列将是列表(1)在函数体。如果将其称为

(append 1 2 3) 

变量序列将是函数体中的列表(1 2 3)。这在Elisp参考手册argument list node中有解释。

(info "(elisp)Argument List") 
2

的elisp/Common Lisp的&rest类似于在Python

*args参数如果你把这个在您的Common Lisp REPL和调用foo具有不同的参数号码,你会看到相当快的了。

(defun foo (a b &rest trailing) 
    (format t "~a :: ~a :: ~a~%" a b trailing))