Doseq évalue 1 x pour chaque y. Est-il possible de le faire évaluer 1 x pour 1 an et ainsi de suite dans Clojure?

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

  •  06-07-2019
  •  | 
  •  

Question

Je ne savais pas trop comment prononcer le nom de ce fil de discussion. Si vous pouvez le clarifier, merci de le faire.

Mon exemple de code est le suivant:

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

La sortie de ce code est:


13
12
11
23
22
21
33
32
31
nil

Je comprends cette compréhension de liste et Doseq s’estime comme cela. Y a-t-il un autre moyen de faire cela, de sorte qu'au lieu de 1 élément de x utilisé pour chaque élément de y, et ainsi de suite, 1 élément de x soit utilisé avec 1 élément de y et ainsi de suite, de sorte que la sortie soit plutôt :


13
22
31

Désolé si je ne le dis pas bien, je n'arrive tout simplement pas à l'exprimer correctement.

EDIT: Je pense que vous pouvez faire cela en Haskell avec des listes de compréhension et une extension de langue. ParallelListComps ou quelque chose.

Était-ce utile?

La solution

Vous pouvez simplement faire

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

Autres conseils

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

entrelacement donne une séquence d'éléments alternés à partir des séquences données et partition regroupe cette séquence en séquences d'éléments n .

Ceci est plus succinct:

 (doall (map println [1 2 3] [3 2 1]))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top