Fala aí Bruno tudo bem?
O que acontece é que você fechou o parênteses na linha do if
depois do soma.
(defn soma-ate [n]
(loop [contador 1 soma 0]
(if (> contador n) soma) ;nessa linha aqui
(recur (inc contador) (+ soma contador))))
Esse parênteses que você fechou, e justamente o da instrução loop
.
Com isso ao chegar no if
ele verifica se o contador é maior que n
(o que de fato não é a menos que você passe 1 para a função) e então ele volta para o loop
.
E vai ficar fazendo essa verificação até estourar a memória.
O correto seria fechar esse parênteses depois do ultimo:
(defn soma-ate [n]
(loop [contador 1 soma 0]
(if (> contador n) soma
(recur (inc contador) (+ soma contador)))))
Dessa forma se o contador
for maior que n
ele devolve a soma, do contrário ele faz a recursão.
Espero ter ajudado e bons estudos.