cl: Common Lisp Compatibility

 
 Appendix B Common Lisp Compatibility
 ************************************
 
 The following is a list of some of the most important incompatibilities
 between this package and Common Lisp as documented in Steele (2nd
 edition).
 
    The word ‘cl-defun’ is required instead of ‘defun’ in order to use
 extended Common Lisp argument lists in a function.  Likewise,
 ‘cl-defmacro’ and ‘cl-function’ are versions of those forms which
 understand full-featured argument lists.  The ‘&whole’ keyword does not
 work in ‘cl-defmacro’ argument lists (except inside recursive argument
 lists).
 
    The ‘equal’ predicate does not distinguish between IEEE
 floating-point plus and minus zero.  The ‘cl-equalp’ predicate has
 several differences with Common Lisp; SeePredicates.
 
    The ‘cl-do-all-symbols’ form is the same as ‘cl-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 ‘cl-do-all-symbols’ to locate any
 but the default obarray.
 
    The ‘cl-loop’ macro is complete except that ‘loop-finish’ 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’ or
 ‘cl-values-list’ is always used to return to a ‘cl-multiple-value-bind’
 or other multiple-value receiver; if ‘cl-values’ is used without
 ‘cl-multiple-value-...’ 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 example, local
 ‘special’ declarations, which are purely advisory in Emacs Lisp, do not
 rigorously obey the scoping rules set down in Steele’s book.
 
    The variable ‘cl--gensym-counter’ starts out with zero.
 
    The ‘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.