Tengo un número arbitrario de listas que me gustaría procesar usando el macro for. Quiero crear una función que pase un vector como enlace ya que el número de listas varía.Problema al pasar un vector como un enlace al macro for
Si codificar la unión, funciona como espero:
=> (def list1 '("pink" "green"))
=> (def list2 '("dog" "cat"))
=> (for [A list1 B list2] (str A "-" B))
("pink-dog" "pink-cat" "green-dog" "green-cat")
Cuando intento crear un vector separado y utilizar esto como la unión golpeo problemas. Aquí se crea manualmente el vector de fijaciones:
=> (def testvector (vec (list 'A list1 'B list2)))
esto parece muy bien:
=> testvector
[A ("pink" "green") B ("dog" "cat")]
=> (class testvector)
clojure.lang.PersistentVector
Sin embargo,
=> (for testvector (str A "-" B))
#<CompilerException java.lang.IllegalArgumentException: for requires a vector for its binding (NO_SOURCE_FILE:36)>
No entiendo por qué testvector no se considera un vector cuando se usan como el enlace para. Agarrando pajas, puse Testvector entre corchetes que mantiene feliz el macro (ve un vector) pero ahora tengo un vector con un elemento (es decir, un vector dentro de un vector) y esto no funciona porque el enlace necesita ser pares de nombre y colección.
=> (for [testvector] (str A "-" B))
#<CompilerException java.lang.IllegalArgumentException: for requires an even number of forms in binding vector (NO_SOURCE_FILE:37)>
Se agradecerá cualquier sugerencia sobre cómo pasar dinámicamente un vector como un enlace a para.
(vec (lista ...)) puede escribirse más simple como (vector ...). – kotarak