¿Alguien me puede decir cómo trabajar con los parámetros almacenados en el valor especificado por & resto.Common Lisp: Trabajando con & parámetros de reposo
He leído mucho y parece que los autores solo saben cómo enumerar todos los parámetros.
(defun test (a &rest b) b)
Esto es agradable de ver, pero no realmente tan útil.
Lo mejor que he encontrado hasta ahora es utilizar primero, segundo, y así sucesivamente para obtener el parámetro que está buscando.
(defun test (a &rest b)
(first b))
me di cuenta de que este método deja de funcionar en la décima parámetro, pero la especificación (por lo que he leído) soporta un mínimo de 50. Aunque son escasas las probabilidades de que voy a utilizar 50 parámetros, que Me gustaría saber cómo acceder a todos.
Gracias
Es una lista dentro de la función, pero pasar una lista como & rest podría no darle el comportamiento que desea (contrario a los parámetros [] de, por ejemplo, el lenguaje C#). Es bastante fácil para un principiante (como yo) cometer este error: suponga que su función es recursiva con un parámetro & rest. Luego, durante la recursión no puede pasar una lista como & rest param, debe usar apply # 'yourfun ... – PawelP
@PawelP Si necesita pasar una lista, simplemente use el param de función normal para pasar esa lista. y los parámetros de descanso son solo una manera fácil de invocar la función con un número variable de parámetros sin envolverlos en una lista usted mismo en cada sitio de llamadas. – Marko
Lo que fue engañoso para mí fue el hecho de que * inside * la función, & rest param es accedida como una lista, sin embargo no se puede pasar directamente como un & rest param recursivamente (porque estarías pasando una lista y es probablemente no sea lo que quieres). Creo que no soy el único principiante que cayó en esta trampa. Parece que LISP hace un "empaquetado" entre bastidores en la invocación de funciones (hace una lista de los parámetros que se analizan como & rest) Por supuesto que su explicación es correcta, no estoy disputando eso. – PawelP