Учебники

Clojure – рекурсия

Мы видели оператор recur в более ранней теме, и хотя цикл for напоминает цикл, recur – это реальный цикл в Clojure.

Если у вас есть опыт программирования, вы, возможно, слышали о хвостовой рекурсии, которая является основной особенностью функциональных языков. Эта рекурсивная специальная форма – та, которая реализует хвостовую рекурсию. Как указывает слово «рекурсия хвоста», рекурс должен вызываться в положении хвоста. Другими словами, recur должен быть последним, что нужно оценить.

Простейший пример оператора recur используется в цикле for. В следующем примере оператор recur используется для изменения значения переменной ‘i’ и передачи значения переменной обратно в выражение цикла.

пример

Live Demo

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

Выход

Вышеуказанная программа производит следующий вывод.