Doseq avalia 1 x para cada y. Existe alguma maneira de fazê-lo avaliar 1 x para 1 y e assim por diante em Clojure?

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Eu não estava realmente certo como expressar o nome deste segmento, por isso, se você pode esclarecer qualquer, faça-o.

Meu código exemplo é o seguinte:

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

A saída desse código é:


13
12
11
23
22
21
33
32
31
nil

Eu entendo que compreensões lista, e doseq tanto avaliar como esta. Existe outra maneira de fazer isso, de modo que em vez de 1 elemento de x que está sendo usado para cada elemento de y, e assim por diante, um elemento de x é usado com um elemento de y e assim por diante, de modo que a saída, ao invés, ser :


13
22
31

Desculpe se eu não estou fraseado esta razão, eu simplesmente não consigo colocar em palavras direito.

EDIT: Eu acho que você pode fazer isso em Haskell com compreensões de lista e uma extensão da linguagem. ParallelListComps ou algo assim.

Foi útil?

Solução

Você pode simplesmente fazer

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

Outras dicas

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

interleave produz uma sequência alternada de elementos a partir das sequências dadas e grupos partition esta sequência em sequências de elementos n.

Este é mais sucinto:

 (doall (map println [1 2 3] [3 2 1]))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top