Subject: Re: Why no call with current continuation?
From: Erik Naggum <>
Date: 03 Oct 2002 14:01:40 +0000
Newsgroups: comp.lang.lisp
Message-ID: <>

* Dorai Sitaram
| *print-length* being a special variable, right?  Then, the call to foo is
| not in a tail-call position.

  This is not as obvious as you think, either.  The unwinding that would
  take place upon a return may well include special variable unbinding and
  unwind-protect execution so a call to a function inside both may well be
  able to inherit the call frame of the caller.  The smart way to ensure
  that special variables are unbound and unwind-protect forms are always
  run is to arrange for the function to return to a system function that
  does the necessary clean-up.  When you do this, neither special bindings
  nor unwind-protect forms would stand between you and tail-call merging.

| [1] That said, I do know of a rather academic paper from the early 1980s
| that treats getting something like special variables to not interfere
| with tail-calls, but it may not be of interest here.

  Perhaps it is already widely implemented.

| To clarify: I too doubt that TCE will become part of CL.

  It is already part of the implementations under suitable optimization.
  Unlike the Scheme world, Common Lisp vendors are allowed to be smarter
  than the specification.

| IOW: while both TCE and call/cc are unlikely, call/cc is unlikelier.

  Perhaps you should try to study reality a little?  Or is that unlikely?

Erik Naggum, Oslo, Norway

Act from reason, and failure makes you rethink and study harder.
Act from faith, and failure makes you blame someone and push harder.