什么和休息在elisp中意味着什么?

时间:2011-02-11 14:26:26

标签: emacs lisp elisp

&rest对此有何意义:(append &rest sequences)

我完成了“elisp_intro”这本书,但我找不到答案。如果你能帮助我,我将非常感激。

3 个答案:

答案 0 :(得分:20)

它表示以下参数是“rest”参数。在您的示例中,sequences是其余参数。

与普通参数不同,rest参数将消耗用户提供的任何参数的“rest”。它是一种创建接受可变数量参数的函数的方法。在函数体内,参数将是一个包含所有额外参数的列表。

因此,如果您的函数看起来像(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)

答案 1 :(得分:10)

函数定义中& rest符号后面的任何参数都将被收集到一个列表对象中。所以在(附加和休息序列)的情况下,如果你调用函数:

(append 1) 

变量序列将是函数体中的列表(1)。如果你把它称为

(append 1 2 3)

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

(info "(elisp)Argument List")

答案 2 :(得分: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))