Doseq auswertet 1 x für jeden y. Gibt es eine Möglichkeit, es bewerten 1 x 1 y und so weiter in Clojure zu machen?

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

  •  06-07-2019
  •  | 
  •  

Frage

ich nicht wirklich sicher war, wie der Name Begriff dieses Threads, also wenn Sie es jede klären können, tun Sie dies bitte.

Mein Beispiel-Code ist dies:

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

Die Ausgabe dieses Codes ist:


13
12
11
23
22
21
33
32
31
nil

Ich verstehe, dass Listenkomprehensionen und doseq beide bewerten wie diese. Gibt es eine andere Möglichkeit, dies zu tun, so dass anstelle von 1-Element von x für jedes Element von y verwendet wird, und so weiter, 1 Element von x mit 1 Elemente von y und so weiter, so dass die Ausgabe stattdessen wäre :


13
22
31

Sorry, wenn ich dieses Recht nicht formulieren, ich kann es einfach nicht in Worte zu fassen scheinen recht.

EDIT: Ich denke, man kann dies mit Listenkomprehensionen und eine Spracherweiterung in Haskell zu tun. ParallelListComps oder so etwas.

War es hilfreich?

Lösung

Sie können einfach tun

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

Andere Tipps

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

interleave ergibt eine Folge von Elementen aus den vorgegebenen Sequenzen und partition Gruppen diese Sequenz in Sequenzen von n Elementen abwechseln.

Das ist kurz und knapp:

 (doall (map println [1 2 3] [3 2 1]))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top