Pergunta

Eu estou tentando entrar na comunidade Clojure. Eu tenho trabalhado muito com Python, e uma das características que fazem uso extensivo de é o método zip (), por iteração sobre pares de valores. Existe uma maneira (inteligente e curto) de alcançar o mesmo em Clojure?

Foi útil?

Solução

Outra maneira é simplesmente usar o mapa, juntamente com alguma função que recolhe os seus argumentos em uma sequência, como este:

user=> (map vector '(1 2 3) "abc")
([1 \a] [2 \b] [3 \c])

Outras dicas

(zipmap [:a :b :c] (range 3))
-> {:c 2, :b 1, :a 0}

iteração sobre mapeia acontece em pares, por exemplo, assim:

(doseq [[k v] (zipmap [:a :b :c] (range 3))]
  (printf "key: %s, value: %s\n" k v))

impressões:

key: :c, value: 2
key: :b, value: 1
key: :a, value: 0

A pergunta foi respondida, mas ainda há interleave, que também lida com um número arbitrário de seqüências, mas não grupo a seqüência resultante em tuplas (mas você pode usar partition para isso).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top