[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: DEFUN inside LET
Date: Tue, 28 Jan 1986 23:12 EST
From: "Scott E. Fahlman" <Fahlman@edu.cmu.cs.c>
I'm not sure if there's actually a firm consensus on this, but in my
opinion Defun inside Let should always work. It's an idiom I use a lot,
and if some alleged Common Lisp didn't supply this, I'd either complain
or fix it myself.
Another issue is what DEFUN inside LET should do. My understanding of Common
Lisp is that
(let ((a 1)) (defun f () a) ...)
is supposed to be equivalent (modulo implicit blocks, &c) to
(let ((a 1)) (setf (symbol-function 'f) #'(lambda () a)) ...)
but that in Scheme it is equivalent to
(let ((a 1)) (labels ((f () a)) ...))
In other words, does an internal DEFUN define a local or a global function?
My opinion now is that I would rather have it define a local function (a la
Scheme), because I think that looks better than a LABELS, because I use local
functions a lot, and because, to me, it seems more natural. But if I used
global functions defined inside environments a lot, I could well change my
mind since the SETF is clearly worse than LABELS (and hence more in need of a
sweetened syntax). At the moment, though, I'm not sure what a global DEFUN
inside a LET is supposed to express (i.e., what is it good for?).