I am perfectly willing to go with options A or B for DEFUN. They seem
equally undesireable syntax. However I would like to have someone define
what the construct for MACRO's, FEXPR's (if Common Lisp has such
things), and any other odd things that DEFUN can generate. If it is not
possible to do that, then I think we would be better off using (PUTPROP
'FOO 'BAR '#(LAMBDA ... Furthermore, I would like to request that the
this definition include a specification of the actual data structure to
be used for interpreted functions. There are two good reasons for this:
- One good thing about Lisp is supposed to be that programs can
manipulate code, it seems bad to have functional objects (except
for compiled code and possibly FUNARG's) be system-dependent.
(The traditional representation is, of course, LAMBDA
expressions.)
- It is one thing to hide the representation used by (DEFUN FOO, since
the user can't directly access function definitions (unless he
happens to know that EXPR properties are used in his
implementation). However by definition (DEFUN (:PROPERTY FOO BAR) ..
is creating a user-visible data structure. It would be a good
practice to define what that data structure is. Clearly in
some cases (compiled code) it is not reasonable to do so, but
for interpreted code I claim it is.
I think that in meeting this request you will find it necessary to
define either an MLAMBDA (a lambda for macro's) or a syntax like either
(LAMBDA (%MACRO L)... or (MACRO LAMBDA (L) .... and the equivalent for
FEXPR's, etc. (if they exist).
This is the reason why I expessed some scepticism about the construct
initially.
-------