3 ms·
Yes, silent TCO. Isn't that what most people mean about TCO when applied to recursion?
by treerex 11y ago
Yes, silent TCO. Isn't that what most people mean about TCO when applied to recursion?
- hga 11y agoPerhaps, but that doesn't mean it's accurate. TCO literally just says tail calls are optimized, and I personally see an advantage to making your intent to make a TCO-ed tail call explicit, so like in Clojure you get a compilation error rather than blowing your stack at runtime. It certainly looks more elegant to do it silently, but Clojure doesn't strive for that sort of elegance.
- dkersten 11y agoTCO is broader than what recur does. Recur only optimises recursive tail-calls to the function you are in, TCO generally implies that any tail-calls (recursive or not) can be optimised (including mutually recursive calls, for which clojure made the trampoline function or just calling one function at the tail of another). Personally, I like clojure's approach as IMHO recur makes intent clear, but recur is a subset of what TCO optimises in other languages.