[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
- To: firstname.lastname@example.org, email@example.com
- Subject: functionp/fboundp
- From: nelson%bach.DEC@decwrl.DEC.COM (Beryl Elaine Nelson)
- Date: Fri, 23 Jan 1987 11:09:00 -0000
From: RHEA::DECWRL::""Gail Zacharias" GZ%OZ.AI.MIT.EDU@XX.LCS.MIT.EDU" 22-JAN-1987 12:37
Subj: symbol-function of non-functions
The manual seems to imply that fboundp is required to return non-nil
for macros and special forms, while symbol-function is merely allowed
to do so (".. function or MAY be an object representing a special form
or macro.."). Am I reading that right?
In any case, it seem to me that these definitions make it impossible
to tell for sure whether a symbol is a valid argument to APPLY/FUNCALL.
I.e. in implementations which do not keep macros in the function cell,
so that macro-function being true does not imply non-applicability of the
symbol, there is no CL way to find out if there is an applicable definition
regardless of whether there is or isn't a macro definition.
In VAX LISP, the function FUNCTIONP returns true if the argument can be
used in a call to FUNCALL or to APPLY. Unfortunately, notes sent to this
mailing list have indicated that in other implementations FUNCTIONP returns
true for all symbols, regardless of the current symbol-function cell contents.
In those cases you could write your own version of functionp to say
(defun apply-argument-p (x)
(if (symbolp x)
(and (fboundp x)
(not (macro-function x))
(not (special-form-p x)))
Why not require fboundp be true if and only if there is an applicable
definition. You could still say (or (macro-function x) (special-form-p x)
(fboundp x)) if you really want to include all possibilities, while there is no
way to implement the more restrictive fboundp in terms of what's currently
You can also now determine what you want by using the form written above.