Мы видели оператор recur в более ранней теме, и хотя цикл for напоминает цикл, recur — это реальный цикл в Clojure.
Если у вас есть опыт программирования, вы, возможно, слышали о хвостовой рекурсии, которая является основной особенностью функциональных языков. Эта рекурсивная специальная форма — та, которая реализует хвостовую рекурсию. Как указывает слово «рекурсия хвоста», рекурс должен вызываться в положении хвоста. Другими словами, recur должен быть последним, что нужно оценить.
Простейший пример оператора recur используется в цикле for. В следующем примере оператор recur используется для изменения значения переменной ‘i’ и передачи значения переменной обратно в выражение цикла.
пример
(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)
Выход
Вышеуказанная программа производит следующий вывод.