1
resposta

[Dúvida] Map não retornar uma coleção?

Na aula é dito que é uma implementação simples de um map, mas pra ser isso não deveria retornar uma coleção com mesmo número de items que a coleção de entrada? Rodei o exemplo e retornou apenas nil

1 resposta

Oi Rodrigo! Tudo certo?

O código que você está utilizando parece estar focado em aplicar uma função a cada elemento de uma sequência, mas não está construindo uma nova coleção com os resultados, que é o comportamento esperado de um map. O map tradicional retorna uma nova coleção com os resultados da aplicação da função a cada elemento da coleção de entrada.

No seu exemplo, a função meu-mapa aplica a função funcao a cada elemento da sequência, mas não armazena os resultados em uma nova coleção. Para que meu-mapa funcione como um map tradicional, você precisará acumular os resultados em uma lista e retorná-la no final. Aqui está um exemplo de como você pode fazer isso:

(defn meu-mapa
  [funcao sequencia]
  (loop [resultado []
         restante sequencia]
    (if (empty? restante)
      resultado
      (recur (conj resultado (funcao (first restante))) (rest restante)))))

Neste exemplo, estou usando loop e recur para iterar sobre a sequência. resultado é uma lista que acumula os resultados da aplicação da função, e restante é a parte da sequência que ainda precisa ser processada. conj é usado para adicionar o resultado da função aplicada ao primeiro elemento da sequência à lista resultado.

Espero que isso ajude a resolver o problema que você está enfrentando.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.