Clojure - rekurencja

Widzieliśmy stwierdzenie recur we wcześniejszym temacie i podczas gdy pętla „for” przypomina trochę pętlę, recur to prawdziwa pętla w Clojure.

Jeśli masz doświadczenie w programowaniu, być może słyszałeś o rekurencji ogonowej, która jest główną cechą języków funkcjonalnych. Ta specjalna forma cykliczna implementuje rekurencję ogonową. Jak wskazuje słowo „rekurencja ogona”, recur musi zostać wywołany w pozycji ogona. Innymi słowy, wartość recur musi być ostatnią oceną.

Najprostszy przykład instrukcji recur jest używany w pętli „for”. W poniższym przykładzie instrukcja recur jest używana do zmiany wartości zmiennej „i” i przekazania wartości zmiennej z powrotem do wyrażenia pętli.

Przykład

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

Wynik

Powyższy program generuje następujące dane wyjściowe.

0
1
2
3
4