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
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
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!