什麼是&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