Subject: Re: Tail recursion & CL From: Erik Naggum <erik@naggum.net> Date: Mon, 01 Oct 2001 23:40:39 GMT Newsgroups: comp.lang.lisp Message-ID: <3210968437468418@naggum.net> * Bruce Hoult | A function call is either the last function call in the body of the | function or else it is not. If it's last then tail-call it (with a | "jump"), if it's not last then call it the regular way (with a "jump to | subroutine"). But this is not quite as trivial as people seem to think. There are all kinds of low-level cleanup issues that may not be visible or even known to the programmer and which the compiler writer may need to be told about (either through a formal specification of a requirement or by invoking a local declaration) before it makes sense to allow for making a tail call into a jump. Also note that the callee needs to believe that it was called, unless the language has specified semantics to this effect, too. | "Last" means either the last expression evaluated in the function. This | means either being physically last, or else being the last expression in | an IF or COND (etc) that is physically last in the function. I think you might mean the form that evaluates to the value of the function. It might, for instance, be possible to unwind special bindings and unwind-protect forms in such a way that you could jump to a function with it returning to the cleanup forms, so the notion of "last" might be very confusing and counterproductive. ///