From ... Path: archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.esat.net!nslave.kpnqwest.net!nloc.kpnqwest.net!nmaster.kpnqwest.net!nreader3.kpnqwest.net.POSTED!not-for-mail Newsgroups: comp.lang.lisp Subject: Re: What's the point of flet? References: <3BDF119D.A51C178B@yale.edu> <9rn8v8$rnu$1@rznews2.rrze.uni-erlangen.de> Mail-Copies-To: never From: Erik Naggum Message-ID: <3213554492332963@naggum.net> Organization: Naggum Software, Oslo, Norway Lines: 30 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 31 Oct 2001 22:01:34 GMT X-Complaints-To: newsmaster@Norway.EU.net X-Trace: nreader3.kpnqwest.net 1004565694 193.71.66.49 (Wed, 31 Oct 2001 23:01:34 MET) NNTP-Posting-Date: Wed, 31 Oct 2001 23:01:34 MET Xref: archiver1.google.com comp.lang.lisp:18947 * Vebjorn Ljosa | But it also makes the parts impossible to test separately. You may simply need a better Common Lisp environment. Suppose you have this silly function: (defun foo () (flet ((bar () t)) (bar))) In Allegro CL, this defines two functions reachable with fdefinition: one named by the symbol foo, and one named by the list (flet foo bar). That is, #'(flet foo bar) returns the inner function bar. If this is not a closure, it is funcallable. (funcall #'(flet foo bar)) => t You can trace inner functions and use these function names in a number of interesting places. I think this is a very useful and intelligent extension to the function name concept, given that it has to be supported for setf methods. /// -- 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.