(apply f x '(y z))
es equivalente a (f x y z)
, por lo que su código es equivalente a (map list '(1 a) '(2 b) '(3 c))
.
Cuando se llama con múltiples listas, itera las listas en paralelo y llama a la función dada con un elemento de cada lista para cada elemento (es decir, de cada lista como sus argumentos, el segundo es el resultado de los segundos elementos, etc.).
Entonces (map list '(1 a) '(2 b) '(3 c))
llama primero a list
con los primeros elementos de las listas (es decir, los números) como argumentos y luego con los segundos elementos (las letras). Entonces obtienes ((list 1 2 3) (list 'a 'b 'c))
.
Esta es una gran pregunta y generó una respuesta muy útil (cómo transponer una secuencia de Clojure), pero el título no es particularmente claro al ayudar a las personas a encontrar esta pregunta. Me gustaría mejorarlo, si eso está bien con @Dfr u otros. –