2 ms·
FWIW, similar macros in Common Lisp could be implemented using TAGBODY, which would not need tail-call elimination; tags have lexical scope and dynamic, so any
by aidenn0 2y ago
FWIW, similar macros in Common Lisp could be implemented using TAGBODY, which would not need tail-call elimination; tags have lexical scope and dynamic, so any functions defined within the tagbody can directly GO to any tag as long as the tagbody has not exited yet.
It should be unsurprising that CL has construct(s) that allow this, given that the specification does not guarantee tail-call elimination.
- kazinator 2y agoIn 2013, I made Common Lisp macros that provide something that looks like labels but is guaranteed tail recursive. https://www.kylheku.com/cgit/lisp-snippets/tree/tail-recursion.lisp https://www.kylheku.com/cgit/lisp-snippets/tree/tail-recursi... No docs or test suite, sorry. Just block comments. A trampoline based thing, deftail, is provided for global tail calls. In the paradigm implemented in this file, calls to tail functions are always tail calls, even if not in a tail context. If it looks like the return value of a tail call is used, too bad; that will never be reached.