Your question is not clear. If you mean: can I do this without using stack space? No. Your insertR* has several independent calls, and this cannot be expressed without a stack.
If you mean: can I use a word like recur to mean "Call yourself recursively", and I don't care if it uses a stack? Not really. You could write it yourself. Sort of:
(defmacro defrec [name & fntail] `(def ~name (fn ~'recurse ~@fntail ))) (defrec foo [x] (when-not (zero? x) (recurse (dec x))))
I suspect this one has a few holes, but basically this is what you are thinking about.
source share