

B. Common Lisp Compatibility


Certain function names, such as member, assoc, and floor, were already taken by (incompatible) Emacs Lisp functions; this package appends `*' to the names of its Common Lisp versions of these functions.

The word defun* is required instead of defun in order to use extended Common Lisp argument lists in a function. Likewise, defmacro* and function* are versions of those forms which understand full-featured argument lists. The &whole keyword does not work in defmacro argument lists (except inside recursive argument lists).

In order to allow an efficient implementation, keyword arguments use a slightly cheesy parser which may be confused if a keyword symbol is passed as the value of another keyword argument. (Specifically, (memq :keyword rest-of-arguments) is used to scan for :keyword among the supplied keyword arguments.)

The eql and equal predicates do not distinguish between IEEE floating-point plus and minus zero. The equalp predicate has several differences with Common Lisp; see section 4. Predicates.

The setf mechanism is entirely compatible, except that setf-methods return a list of five values rather than five values directly. Also, the new "setf function" concept (typified by (defun (setf foo) ...)) is not implemented.

The do-all-symbols form is the same as do-symbols with no obarray argument. In Common Lisp, this form would iterate over all symbols in all packages. Since Emacs obarrays are not a first-class package mechanism, there is no way for do-all-symbols to locate any but the default obarray.

The loop macro is complete except that loop-finish and type specifiers are unimplemented.


The variable *gensym-counter* starts out with a pseudo-random value rather than with zero. This is to cope with the fact that generated symbols become interned when they are written to and loaded back from a file.


The second argument of check-type is treated differently.

