¿Qué significa la &rest
en esto: (append &rest sequences)
¿Qué significa & & resto en elisp?
he terminado el libro "elisp_intro", pero no encontré la respuesta. Estaré muy agradecido si me puedes ayudar.
¿Qué significa la &rest
en esto: (append &rest sequences)
¿Qué significa & & resto en elisp?
he terminado el libro "elisp_intro", pero no encontré la respuesta. Estaré muy agradecido si me puedes ayudar.
Indica que el siguiente argumento es el argumento "resto". En el caso de su ejemplo, sequences
es el argumento de resto.
A diferencia de un argumento normal, el argumento de resto consumirá el "resto" de los parámetros proporcionados por el usuario. Es una forma de hacer una función que acepta una cantidad variable de argumentos. Dentro del cuerpo de la función, el argumento será una lista que contiene todos los parámetros adicionales.
Así que si había una función que parecía (add &rest numbers)
, entonces se podría llamar como (add 1 2 3 4 5)
, y dentro de la función del argumento numbers
tendría el valor (1 2 3 4 5)
.
O por ejemplo, ((lambda (a &rest r) r) 1 2 3) ;=> (2 3)
Cualquier argumento siguientes el símbolo resto & en una definición de función serán recogidos en un único objeto lista. Así, en el caso de (anexar & secuencias de descanso), si se llama a la función:
(append 1)
las secuencias variables serán la lista (1) en el cuerpo de la función. Si lo llama como
(append 1 2 3)
las secuencias variables serán la lista (1 2 3) en el cuerpo de la función. Esto se explica en el manual de referencia de Elisp, en el argument list node.
(info "(elisp)Argument List")
elisp/Common Lisp &rest
es análogo al parámetro *args
en Python
Si pones esto en su repl Common Lisp y llamar a foo con número de argumentos variable, se verá qué pasa con bastante rapidez.
(defun foo (a b &rest trailing)
(format t "~a :: ~a :: ~a~%" a b trailing))
gracias. Su respuesta es muy explícita. –
Vale la pena señalar que la función 'apply' funciona muy bien junto con la función' & rest', ya que 'apply' requiere que su argumento final sea una lista de argumentos. Entonces, si necesita aceptar una cantidad variable de argumentos para pasarlos a otra función, estas dos características lo hacen conveniente. – phils