[armedbear-devel] defun return value is not conforming.
Alessio Stalla
alessiostalla at gmail.com
Sat Nov 20 09:32:11 UTC 2010
On Sat, Nov 20, 2010 at 7:26 AM, Pascal J. Bourguignon
<pjb at informatimago.com> wrote:
>
> CLHS says:
>
> Macro DEFUN
>
> Syntax:
>
> defun function-name lambda-list [[declaration* | documentation]] form*
>
> => function-name
>
> Arguments and Values:
>
> function-name---a function name.
>
> and the glossary:
>
> function name n. 1. (in an environment) A symbol or a list (setf
> symbol) that is the name of a function in that environment. 2. A
> symbol or a list (setf symbol).
>
>
> Therefore (defun f () ...) should return the symbol F, not the function F.
>
> Unfortunately, after having loaded quicklisp, it looks like abcl switches
> to another definition, which returns a function instead of a name:
>
> (macroexpand '(defun (x) (1+ x)))
>
> Before: (SYSTEM:%DEFUN (QUOTE F) (LAMBDA (X) (BLOCK F (1+ X))))
> (correct)
>
> After: (PROGN (SYSTEM:%DEFUN (QUOTE F) (SYSTEM:NAMED-LAMBDA F (X) (BLOCK F (1+ X)))))
> WRONG.
I don't know what's causing the definition of DEFUN to change; but
anyway both of your code snippets correctly return the symbol F. Are
you sure that's the exact macroexpansion you get? (btw, the
macroexpand form should be (macroexpand '(defun F (x) (1+ x))) -- f
was missing).
I'll try later to load quicklisp and reproduce the problem.
Cheers,
Alessio
More information about the armedbear-devel
mailing list