en primer lugar que '()
()
y son equivalentes, ya lista vacía es la auto evaluación e igual a NIL
, y en cualquier caso no es necesario en aquellos LET porque NIL
está implícito en `(let (variable) ...) la sintaxis, lo cual es una razón por la que necesita un paréntesis alrededor de la unión cuando se da el valor de partida.
No es que el uso de LET
es necesario para este caso. Usando LOOP características más ampliamente esta función se puede escribir como:
(defun unzip (seq)
"Takes an even-length list and breaks it apart by evens/odd index"
(loop for n from 0
for element in seq
if (oddp n)
collect element into oddresult
else
collect element into evenresult
finally (return (list oddresult evenresult))))
personalmente prefiero iterate para la mayoría de iteración, utilizando el que se puede escribir como:
(defun unzip (seq)
"Takes an even-length list and breaks it apart by evens/odd index"
(iter (for element in seq)
(for n from 0)
(if (oddp n)
(collect element into oddresult)
(collect element into evenresult))
(finally (return (list oddresult evenresult)))))
o incluso:
(defun unzip (seq)
"Takes an even-length list and breaks it apart by evens/odd index"
(iter (generate element in seq)
(collect (next element) into evenresult)
(collect (next element) into oddresult)
(finally (return (list oddresult evenresult)))))
EDITAR: Notas adicionales: El nombre unzip
denota convencionalmente una función ligeramente diferente. El nombre del argumento realmente debería ser list
, ya que seq
sugeriría que la función también toma vectores. Si bien es posible tener funciones que operan en secuencias generalizadas, generalmente no se recomienda, ya que las listas y vectores tienen diferentes características de rendimiento. En particular, el acceso aleatorio a través de NTH
es tiempo lineal para listas, lo que significa que casi nunca debería usarlo. Incluso si el costo de tiempo es insignificante, generalmente indica que debe usar una estructura de datos diferente.
No sería educado burlan alguien sobre su discurso empediment. –
Lisp me recuerda al griego antiguo, donde no tiene utilidad real (además de Emacs), solo unas pocas personas pueden usar el idioma, mientras que a la misma gente, las más educadas, les encanta hablar de ello. , y su estilo, durante horas :-) –
@ ring0: En cualquier lenguaje de programación, hay un idioma y un estilo correcto, y hay quienes están interesados en aprender y discutirlo. Incluso hay un neologismo - "pitónico". –