Olá Cesar, tudo bem?
Eu também estava fazendo a aula e cheguei numa forma que evitamos essa parada no nil
da seguinte forma:
(defn meu-mapa
"Simula um map sem retornar valor algum
apenas aplicando a função no elemento"
[function elements]
(if (seq elements)
(do
(function (first elements))
(recur function (next elements)))))
A razão é que ao invés de fazer (not ( nil? valor))
podemos tentar transformar o valor em uma sequência, pois ai temos uma coisa bem interessante que é:
(println (next '(1))) ; O resultado associado é nil
(println (rest '(1))) ; O restulado associado é ()
(println (seq nil)) ; Seq de nil -> nil
(println (seq '())) ; seq de () -> nil
E dessa forma conseguimos garantir que caso não seja uma sequência interrompemos a execução :)
Fazendo alguns testes:
(meu-mapa println [ false 1 2 true 3 nil 4 5])
false
1
2
true
3
nil
4
5
E funciona corretamente :)
Abraços e Bons Estudos!