[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

funcall



  Suppose we have the following code:

  (defun mumble (a)
	(flet ((mumble (a) (print "internal-mumble")))
	      (when (something a) (funcall 'mumble a))
	      (print "external-mumble")

  Is it 100% legal to pass funcall a symbol? Most implementations I
have seen allow this although the manual tends to imply that the
thing being funcall'ed must be a "function". Notice that I am
carefully trying avoid what exactly is a function question which
others have raised recently.

  Is a compiler justified in simply turning this into a call to mumble
as if it had been written as (mumble a) in the first place?

  If so, which mumble should be apparent? If not, is a compiler justified
in turning the form into:

	(funcall (symbol-function 'mumble) a) ?

  Another related matter, suppose we change the funcall arg to
#'mumble --> (function mumble). Is it clearly the case then that
the mumble which is apparent is the inner one?

--David

p.s. Sorry if this question has been answered previously..