Hi, I wrote TAILPROG originally and the above unattributed cut and paste is incomplete. Note that the macro expands to another macro called ARGTAGS. This stuff is now hosted in a GIT repository. http://www.kylheku.com/cgit/cgit.cgi/lisp-snippets/tree
In tail-recursion.lisp, I also included DEFTAIL, which is a way to have tail recursion between functions not in the same scope (even in separate source files). It uses dynamic non-local control transfers and a hidden dispatch loop.
These constructs are different from tail recursion and are useful even if you have it from your compiler. One big difference is that the calls are always tail calls, no matter their position in the expression. (I.e. they are not just tail calls in a tail position!)