Скажем, у меня есть такая функция:
user=> (def m {10 5, 5 2, 2 1})
#'user/m
user=> (defn hierarchy [x] (when x (cons x (hierarchy (get m x)))))
#'user/hierarchy
user=> (hierarchy 10)
(10 5 2 1)
user=>
И, очевидно, здесь это нормально, потому что глубина стека будет небольшой. Но для этого общего типа проблемы, когда я создаю список, который хочу вернуть, рекурсивный вызов всегда заканчивается вызовом cons. Как мне преобразовать это в хвостовую рекурсию, чтобы я мог использовать повторение и не занимать место в стеке?