Doseq evalúa 1 x por cada y. ¿Hay alguna manera de hacer que evalúe 1 x por 1 y así sucesivamente en Clojure?

StackOverflow https://stackoverflow.com/questions/1216668

  •  06-07-2019
  •  | 
  •  

Pregunta

No estaba realmente seguro de cómo expresar el nombre de este hilo, así que si puede aclararlo, hágalo.

Mi código de ejemplo es este:

(doseq [x [1 2 3] y [3 2 1]] (println (str x y)))

La salida de ese código es:


13
12
11
23
22
21
33
32
31
nil

Entiendo esa lista de comprensiones, y doseq ambas se evalúan así. ¿Hay alguna otra manera de hacer esto, de modo que en lugar de 1 elemento de x se use para cada elemento de y, y así sucesivamente, 1 elemento de x se use con 1 elemento de y y así sucesivamente, de modo que la salida sea en su lugar :


13
22
31

Lo siento si no estoy redactando esto correctamente, parece que no puedo expresarlo con palabras correctas.

EDITAR: Creo que puedes hacer esto en Haskell con listas de comprensión y una extensión de lenguaje. ParallelListComps o algo así.

¿Fue útil?

Solución

Simplemente puedes hacer

(doseq [[x y] (map vector [1 2 3] [3 2 1])] 
  (println (str x y)))

Otros consejos

(partition 2
  (interleave [1 2 3] [3 2 1]))

interleave produce una secuencia de elementos alternos de las secuencias dadas y partición agrupa esta secuencia en secuencias de elementos n .

Esto es más sucinto:

 (doall (map println [1 2 3] [3 2 1]))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top