Subject: Re: bug#32284: special form documentation

From: Brett Gilio <[email-masked]>
Date: Thu, 26 Jul 2018 19:04:32 -0500

Nicholas Drozd writes:

> The Elisp manual section on Special Forms (10.2.7) lists around 
> two dozen
> special forms, but two of them aren't special forms.
>
> * `lambda', it turns out, is not a special form, but a macro 
> that wraps
> itself in a call to the special form `function'. (The 
> documentation for
> `lambda' refers to it as "self-quoting"; this might be better 
> changed to
> "self-evaluating".)
>
> * `track-mouse' isn't a special form, but a macro wrapper around 
> the
> primitive function `internal--track-mouse', which isn't a 
> special form
> either. (Section 29.15 on Mouse Tracking also inaccruately 
> refers to
> `track-mouse' as a special form.)
>
> On the other hand, the special form `inline' is not listed in 
> the Special
> Forms section.
>
> A list of all special forms can be gotten with
>
> (let (special-forms)
>   (mapatoms
>    (lambda (sym)
>      (when (special-form-p sym)
>        (push sym special-forms))))
>   (sort special-forms #'string<))

Hi Nicholas,

Thank you for the note. As far as I can see you are correct about 
the
method of implementation being macros. But that does not exclude 
them
from being special forms, as from my knowledge a special form is 
simply
an expression that does not follow the formal rules for the
implementation of a function.

Most lisps define their special forms from a small subset of 
primitives
such as lambda and macros, of which these apply.

Anybody else have any input?

-- 
Brett M. Gilio
Free Software Foundation, Member
https://parabola.nu | https://emacs.org