Ваш вопрос неясен. Если вы имеете в виду: Могу ли я сделать это без использования стека? Нет. Ваш insertR*
имеет несколько самостоятельных вызовов, и это невозможно выразить без стека.
Если вы имеете в виду: могу ли я использовать такое слово, как recur
, чтобы означать «называть себя рекурсивно», и мне все равно, использует ли оно стек? На самом деле, нет. Вы могли бы написать это самостоятельно, хотя. Что-то вроде:
(defmacro defrec [name & fntail]
`(def ~name (fn ~'recurse ~@fntail)))
(defrec foo [x]
(when-not (zero? x)
(recurse (dec x))))
Я подозреваю, что у этого есть несколько отверстий, но это в основном то, что вы думаете.