At 2:38 AM +0100 2/27/03, Pascal Bourguignon wrote:
I've not found any predicate to distinguish between built-in functions
and special forms.

In Emacs-21, the documentation is consistent enough that this seems to always work.

(defun special-form-p (symbol)
    (string-match "\\.\\.\\.\\|&rest" (documentation symbol)))
 
Of course that should really be:

(defun special-form-p (symbol)
    (and (subrp (symbol-function symbol))
         (string-match "\\.\\.\\.\\|&rest" (documentation symbol))))
 
--Greg