Subject: Re: Tail recursion elimination in methods
From: Erik Naggum <erik@naggum.net>
Date: Mon, 12 Nov 2001 03:39:19 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3214525157799353@naggum.net>

* Software Scavenger
| The following behavior in Lispworks 4.1.20 doesn't make sense, because
| Lispworks eliminates tail recursion in ordinary functions when compiled.

  If it allows advice to functions the same way it allows :around, :before,
  and :after methods, it is hard to do it for functions, too.  Predicting
  what a programmer will do is hard.  Disallowing certain things because of
  a high optimization level is not a good idea, because it would mean that
  dynamism and production quality would not be possible at the same time,
  and that is sometimes precisely what you want.

| And why does it say the method is already compiled?

  Well, it does not say that.  You asked for the symbol to be compiled, and
  the symbol's function value is the generic function, so it said that the
  generic function is already compiled.  That is because you did not define
  your own generic function (with defgeneric); you let defmethod use one of
  its already defined and compiled generic functions for you in the absence
  of an existing generic function.

///
-- 
  Norway is now run by a priest from the fundamentalist Christian People's
  Party, the fifth largest party representing one eighth of the electorate.
-- 
  Carrying a Swiss Army pocket knife in Oslo, Norway, is a criminal offense.