&rest
对此有何意义:(append &rest sequences)
我完成了“elisp_intro”这本书,但我找不到答案。如果你能帮助我,我将非常感激。
答案 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))