The following is a list of some of the most important incompatibilities between this package and Common Lisp as documented in Steele (2nd edition).
cl-defun is required instead of
defun in order
to use extended Common Lisp argument lists in a function. Likewise,
cl-function are versions of those forms
which understand full-featured argument lists. The
keyword does not work in
cl-defmacro argument lists (except
inside recursive argument lists).
equal predicate does not distinguish
between IEEE floating-point plus and minus zero. The
predicate has several differences with Common Lisp; see Predicates.
cl-do-all-symbols form is the same as
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
cl-do-all-symbols to locate any but the default obarray.
cl-loop macro is complete except that
and type specifiers are unimplemented.
The multiple-value return facility treats lists as multiple
values, since Emacs Lisp cannot support multiple return values
directly. The macros will be compatible with Common Lisp if
cl-values-list is always used to return to
cl-multiple-value-bind or other multiple-value receiver;
cl-values is used without
or vice-versa the effect will be different from Common Lisp.
Many Common Lisp declarations are ignored, and others match
the Common Lisp standard in concept but not in detail. For
special declarations, which are purely
advisory in Emacs Lisp, do not rigorously obey the scoping rules
set down in Steele’s book.
cl--gensym-counter starts out with zero.
cl-defstruct facility is compatible, except that structures
are of type
:type vector :named by default rather than some
special, distinct type. Also, the
:type slot option is ignored.
The second argument of
cl-check-type is treated differently.