(defn my-rev [col]
(loop [ col col
result []]
(if (empty? col)
result
(recur (rest col) (cons (first col) result)))))
Q1.
JVM не может оптимизировать рекурсию, рекурсивную функцию, которая бы напрямую и переполняла стек.Поэтому в Clojure, который использует цикл / recur.Таким образом, без использования функции, которая повторяет глубокую рекурсию, невозможно определить.(который также используется для рекурсии как батут функции.)
Q2.
рекурсивная функция по recur, должна быть хвостово-рекурсивной.Если обычная рекурсивная функция изменится на хвостовую рекурсивную функцию, то есть необходимость нести значение переменной, требуемой в качестве аккумулятора.