Clojure - Récursivité

Nous avons vu l'instruction recur dans une rubrique précédente et alors que la boucle 'for' est un peu comme une boucle, recur est une vraie boucle dans Clojure.

Si vous avez une formation en programmation, vous avez peut-être entendu parler de la récursivité de queue, qui est une caractéristique majeure des langages fonctionnels. Cette forme spéciale récurrente est celle qui implémente la récursivité de la queue. Comme l'indique le mot «récursion de queue», recur doit être appelé en position de queue. En d'autres termes, la récurrence doit être la dernière chose à évaluer.

L'exemple le plus simple de l'instruction recur est utilisé dans la boucle «for». Dans l'exemple suivant, l'instruction recur est utilisée pour modifier la valeur de la variable «i» et renvoyer la valeur de la variable à l'expression de boucle.

Exemple

(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)

Production

Le programme ci-dessus produit la sortie suivante.

0
1
2
3
4