Clojure - Recursão

Vimos a instrução recorrente em um tópico anterior e enquanto o loop 'for' é um pouco como um loop, recur é um loop real em Clojure.

Se você tem experiência em programação, talvez já tenha ouvido falar em recursão de cauda, ​​que é um recurso importante das linguagens funcionais. Esta forma especial recorrente é aquela que implementa a recursão da cauda. Como a palavra “recursão da cauda” indica, recur deve ser chamado na posição da cauda. Em outras palavras, a recorrência deve ser a última coisa a ser avaliada.

O exemplo mais simples da instrução recorrente é usado dentro do loop 'for'. No exemplo a seguir, a instrução recur é usada para alterar o valor da variável 'i' e alimentar o valor da variável de volta para a expressão de loop.

Exemplo

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (loop [i 0]
      (when (< i 5)
      (println i)
      (recur (inc i)))))
(Example)

Resultado

O programa acima produz a seguinte saída.

0
1
2
3
4