2011-02-11 28 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))