1
resposta

[Dúvida] Comportamento do map

**Contexto:

(def pedido {:mochila {:quantidade 2, :preco 80} :camiseta {:quantidade 3, :preco 40}})

(defn imprime-e-15 [valor] (println "valor =" valor) 15)

(println (map imprime-e-15 pedido))

**Dúvida:

Por que o retorno do map neste exemplo fica "travado" para cada elemento?

(valor = [:mochila {:quantidade 2, :preco 80}] valor = [:camiseta {:quantidade 3, :preco 40}] 15 15)

Como o map aplica a função para cada elemento, eu esperaria que o retorno fosse:

(valor = [:mochila {:quantidade 2, :preco 80}] 15 valor = [:camiseta {:quantidade 3, :preco 40}] 15)

1 resposta

O problema está relacionado com o fato de que a função imprime-e-15 sempre retorna o valor 15, independentemente do valor de entrada.

Quando você aplica o map sobre um mapa, ele executa a função para cada par chave-valor do mapa e retorna um novo mapa com os resultados. No seu exemplo, a função imprime-e-15 é aplicada duas vezes, uma para cada par chave-valor do mapa pedido.

No entanto, como a função imprime-e-15 sempre retorna 15, o novo mapa gerado pelo map contém apenas o valor 15, uma vez para cada par chave-valor do mapa original.

Portanto, quando você imprime o resultado do map, é impresso duas vezes o valor 15, uma para cada par chave-valor do mapa original.